Vue 人资 实战篇十 全屏化插件、动态主题设置、多语言化语言包、tab页视图(假)

这篇博客详细介绍了如何在Vue项目中实现全屏功能、动态主题设置、多语言支持以及Tab页视图。全屏功能依赖screenfull插件,动态主题通过修改SCSS颜色变量实现。多语言使用vue-i18n,引入自定义语言包并应用于左侧菜单。最后,展示了如何集成和使用多页签组件。
摘要由CSDN通过智能技术生成

1.0 全屏插件的引用

目标:实现页面的全屏功能

全屏功能可以借助一个插件来实现

  1. 第一步,安装全局插件screenfull
npm i screenfull
  1. 第二步,封装全屏显示的插件·· src/components/ScreenFull/index.vue
<template>
  <!-- 放置一个图标 -->
  <div>
    <!-- 放置一个svg的图标 -->
    <svg-icon icon-class="fullscreen" style="color:#fff; width: 20px; height: 20px" @click="changeScreen" />
  </div>
</template>

<script>
import ScreenFull from 'screenfull'
export default {
   
  methods: {
   
    //   改变全屏
    changeScreen() {
   
      if (!ScreenFull.isEnabled) {
   
        // 此时全屏不可用
        this.$message.warning('此时全屏组件不可用')
        return
      }
      // document.documentElement.requestFullscreen()  原生js调用
      //   如果可用 就可以全屏
      ScreenFull.toggle()
    }
  }
}
</script>

<style>

</style>

  1. 第三步,全局注册该组件 src/components/index.js
import ScreenFull from './ScreenFull'
Vue.component('ScreenFull', ScreenFull) // 注册全屏组件
  1. 第四步,放置于 layout/navbar.vue
<screen-full class="right-menu-item" />
.right-menu-item {
   
   vertical-align: middle;
}

2.0 动态主题的设置

目标: 实现动态主题的设置

我们想要实现在页面中实时的切换颜色,此时页面的主题可以跟着设置的颜色进行变化

简单说明一下它的原理: element-ui 2.0 版本之后所有的样式都是基于 SCSS 编写的,所有的颜色都是基于几个基础颜色变量来设置的,所以就不难实现动态换肤了,只要找到那几个颜色变量修改它就可以了。 首先我们需要拿到通过 package.json 拿到 element-ui 的版本号,根据该版本号去请求相应的样式。拿到样式之后将样色,通过正则匹配和替换,将颜色变量替换成你需要的,之后动态添加 style 标签来覆盖原有的 css 样式。

  1. 第一步, 封装颜色选择组件 ThemePicker 代码地址:@/components/ThemePicker

注意:本章节重点在于集成,内部的更换主题可以先不用关心。

(也可以去代码地址里去复制)

<template>
  <el-color-picker
    v-model="theme"
    :predefine="['#409EFF', '#1890ff', '#304156','#212121','#11a983', '#13c2c2', '#6959CD', '#f5222d', ]"
    class="theme-picker"
    popper-class="theme-picker-dropdown"
  />

</template>

<script>
const version = require('element-ui/package.json').version // element-ui version from node_modules
const ORIGINAL_THEME = '#409EFF' // default color
export default {
   
  data() {
   
    return {
   
      chalk: '', // content of theme-chalk css
      theme: ''
    }
  },
  computed: {
   
    defaultTheme() {
   
      return this.$store.state.settings.theme
    }
  },
  watch: {
   
    defaultTheme: {
   
      handler: function(val, oldVal) {
   
        this.theme = val
      },
      immediate: true
    },
    async theme(val) {
   
      const oldVal = this.chalk ? this.theme : ORIGINAL_THEME
      if (typeof val !== 'string') return
      const themeCluster = this.getThemeCluster(val.replace('#', ''))
      const originalCluster = this.getThemeCluster(oldVal.replace('#', ''))
      console.log(themeCluster, originalCluster)
      const $message = this.$messag
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值