iis服务器助手广告广告
返回顶部
首页 > 资讯 > 精选 >使用vue怎么实现主题切换
  • 466
分享到

使用vue怎么实现主题切换

2023-06-15 07:06:54 466人浏览 独家记忆
摘要

这篇文章给大家介绍使用Vue怎么实现主题切换,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。第一种办法:动态组件当主题的路由并没有发生变化,仅是组件内部的样式,功能发生了变化,我们可以将一个组件复制一遍,修改完后,通过懒

这篇文章给大家介绍使用Vue怎么实现主题切换,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。

第一种办法:动态组件

当主题的路由并没有发生变化,仅是组件内部的样式,功能发生了变化,我们可以将一个组件复制一遍,修改完后,通过懒加载和动态组件实现。

// 页面组件<template>    <div>        <component :is="themeName" />    </div></template><script>    export default{        name: 'Home',        components:{            theme1:()=>import('@/theme/theme1/a'),            theme2:()=>import('@/theme/theme2/a'),        },        computed:{            themeName(){                retun `theme${this.$store.state.themeId}`            }        }    }</script>

在组件中,我将script部分抽离出来,因为大部分组件其实在逻辑上是相同。哪怕有一些不同,我们也可以直接在主题2的组件中更改,减少对主题1的影响。

//action.jsexport default{    name:'Theme1',    ....}<template><div class="theme1"></div></template><script>    import action from '../componentAction/action'    action.name='Theme1'    export default action</script><style scoped></style>

这样实现的有点是可以通过子组件的style scoped实现样式隔离,同时功能数据上都会隔离,例如两个子组件中的swiper不会相互影响。 同时,懒加载也减小了首页的加载时体积。 后面再增加新增的主题也只是照猫画虎而已。

第二种办法,路由隔离

路由隔离其实就是简单的theme1写一个路由的数组,theme2写一套路由。

// router.js{    path:'/theme3',    name:'theme3Index',    component: () => import('../views/theme3/Index.vue'),    children:[      {        path: '/theme3/entry',        name: 'theme3Entry',        component:  () => import('../views/theme3/entry.vue'),      }     ] }

这种办法其实是下下之策,我使用这个主要是因为路由变化了,比如之前是直接进入a.vue,但是现在前面多加了一层entry页面,所以只能改变路由。 这种办法也实现了比较好的隔离。

总结

以上两种思路是我针对于我们当前业务的思考,仅供参考。

其实这两种方法都有一个共同的问题,就是代码冗余。每个组件都避不可免的带有一部分之前主题的代码,虽然,大部分逻辑代码可以抽离出来,但是CSS和template却无法抽离。

如果每次一个主题增加一个dom,一个功能块,如果每次都用v-if,那么其实代码以后会更加难以维护。因此,我选择了按照主题去划分代码。

额外补充基于css的两种方法

方法一 多套css

<!-- 中心 --><template> 动态获取父级class名称,进行一个父级class的多次定义  <div :class="className">    <div class="switch" v-on:click="chang()">      {{ className == "box" ? "开灯" : "关灯" }}    </div>  </div></template><script>export default {  name: "Centre",  data() {    return {      className: "box"    };  },  methods: {  // 改变class    chang() {      this.className === "box"        ? (this.className = "boxs")         : (this.className = "box");    }  },};</script><style lang="scss">当class为box 使用witch的css@import "./style/witch.scss";当class为boxs 使用black的css@import "./style/black.scss";.switch {  position: fixed;  top: 4px;  right: 10px;  z-index: 50;  width: 60px;  height: 60px;  background: #fff;  line-height: 60px;  border-radius: 20%;}</style>

每个css文件样式大致相同,只是最外层的父级不一样,分别为.box 和.boxs

方法二 scss动态切换变量

我自己是分为了2个主要文件来做的

  • _variable.scss 变量管理文件

  • var()为css3中提出的声明样式变量的方法

  • var(属性名,属性值)注意属性值不能是字符串

// 主题切换$bGColor:var(--backgroundColor,rgb(255,255,255));$fontColor:var(--fonntColor,rgb(0,0,0));$bgmColor:var(--backgroundMColor,rgb(238,238,238));$tableColor:var(--tableColor,rgb(218,218,218));$borderColor:var(--borderColor,rgb(238,238,238));$tablesColor:var(--tablesColor,rgb(255,255,255));$inputColor:var(--inputColor,rgb(255,255,255))

创建的_variable.scss 文件我在vue.config.js进行了一个全局的配置,没有在组件中引入

  css: {    loaderOptions: {      // 此文件为主题切换文件      sass: {        prependData: `@import "./src/styles/_variable.scss";`,      },    },  },

publicStyle.js

这个方法可以去修改var定义的变量
document.getElementsByTagName("body")[0].style.setProperty("属性名", "替换的属性值f");

//  主题切换const cut = (cutcheack) => {    document.getElementsByTagName("body")[0].style.setProperty("--backgroundColor", cutcheack ? "#121212" : "#fff");    document.getElementsByTagName("body")[0].style.setProperty("--fonntColor", cutcheack ? "#cecece" : "#333");    document.getElementsByTagName("body")[0].style.setProperty("--backgroundMColor", cutcheack ? "#333" : "#eee");    document.getElementsByTagName("body")[0].style.setProperty("--tableColor", cutcheack ? "#000" : "#d8d8d8");    document.getElementsByTagName("body")[0].style.setProperty("--tablesColor", cutcheack ? "#222" : "#fff");    document.getElementsByTagName("body")[0].style.setProperty("--inputColor", cutcheack ? "#666" : "#fff");    document.getElementsByTagName("body")[0].style.setProperty("--borderColor", cutcheack ? "#666" : "#fff");};export default cut;

组件中使用

<!-- 首页 --><template><div class='home'>      <el-switch v-model="cutcheack" active-color="#333" inactive-color="#13ce66"  active-text="主题" @change="switchs"></el-switch></div></template><script>import cut from "../../utils/publicStyle.js";export default {  name: "Home",  data() {    return {      cutcheack: false, //主题切换    };  },  methods: {    // 左侧导航隐藏或显示    // 切换主题    switchs() {      cut(this.cutcheack);    },  },};</script><style lang='scss' scope>.home {    height: 100%;    width: 100%;background:$bgColor;    .el-container {        height: 100%;        color:$fontColor;    }}</style>

关于使用vue怎么实现主题切换就分享到这里了,希望以上内容可以对大家有一定的帮助,可以学到更多知识。如果觉得文章不错,可以把它分享出去让更多的人看到。

--结束END--

本文标题: 使用vue怎么实现主题切换

本文链接: https://www.lsjlt.com/news/278786.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • 使用vue怎么实现主题切换
    这篇文章给大家介绍使用vue怎么实现主题切换,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。第一种办法:动态组件当主题的路由并没有发生变化,仅是组件内部的样式,功能发生了变化,我们可以将一个组件复制一遍,修改完后,通过懒...
    99+
    2023-06-15
  • Vue怎么使用Less与Scss实现主题切换
    这篇文章主要介绍“Vue怎么使用Less与Scss实现主题切换”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“Vue怎么使用Less与Scss实现主题切换”文章能帮助大家解决问题。一、Less/Scs...
    99+
    2023-07-05
  • Vue怎么用CSS变量实现切换主题功能
    本篇内容介绍了“Vue怎么用CSS变量实现切换主题功能”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!  ...
    99+
    2024-04-02
  • 使用vue-antd动态切换主题
    目录vue-antd动态切换主题安装依赖Vue3.0 + Antd,修改antd主题色,配置全局cssvue-antd动态切换主题 安装依赖 1 webpack-theme-colo...
    99+
    2024-04-02
  • vue+element-ui实现主题切换功能
    element-ui提供了自定义主题 自定义主题 一、安装 npm i element-theme -gnpm i element-theme-chalk -Dnpm i https...
    99+
    2024-04-02
  • Vue UI框架的主题切换功能实现
    目录AntD 的方式1. 创建黑暗主题文件2. 创建切换主题的函数3. 切换主题Quasar 的方式ElementUI 的方式NaiveUI 的方式在如今,很多网页已经可以手动切换明...
    99+
    2022-12-08
    vue主题切换 vue ui框架主题切换
  • Vue使用Less与Scss实现主题切换方法详细讲解
    目录一、Less/Scss变量换肤二、element-UI组件的换肤一、Less/Scss变量换肤 具体实现: 1、初始化vue项目 2、安装插件: npm install styl...
    99+
    2023-02-25
    Vue主题切换 Vue Less Scss实现主题切换
  • 怎么简单实现CSS主题的切换
    这篇文章给大家分享的是有关怎么简单实现CSS主题的切换的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。HTML首先,我们需要包含“按钮”,这些按钮将触发主题根据选择的主题进行切换。(注:你总是可以使这些作为 opt...
    99+
    2023-06-08
  • vue实现主题切换的多种思路分享
    目录动态改变主题 第一种办法:动态组件 第二种办法,路由隔离 总结 额外补充基于css的两种方法方法一 多套css方法二 scss动态切换变量 动态改变主题 首先需要解决的是如何知...
    99+
    2024-04-02
  • Vue项目如何实现切换主题色思路
    目录Vue项目切换主题色思路需求实现效果实现思路总结Vue项目切换主题色思路 需求 用户通过取色器选择自己喜欢的颜色,替换项目中的主题色 实现效果 实现思路 在项目中使用的是les...
    99+
    2023-01-13
    Vue主题色 Vue切换主题色 Vue主题色切换
  • 利用JetpackCompose实现主题切换功能
    目录前言color.ktTheme.kt关于compositionLocalOf完整代码前言 新建的Compose项目默认的 Material 主题为我们提供了一...
    99+
    2024-04-02
  • vue怎么实现更换主题功能
    这篇文章主要讲解了“vue怎么实现更换主题功能”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“vue怎么实现更换主题功能”吧!方式一:class切换方式实现:在每个需要更换的页面定义多个cla...
    99+
    2023-07-04
  • WinForm中怎么实现主题和皮肤切换
    在WinForm中实现主题和皮肤切换通常可以通过以下步骤来实现: 创建多个不同主题或皮肤的样式文件,比如XML文件或INI文件等,...
    99+
    2024-04-08
    winform
  • MySQL主从切换怎么实现
    这篇文章主要介绍“MySQL主从切换怎么实现”,在日常操作中,相信很多人在MySQL主从切换怎么实现问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”MySQL主从切换怎么实现”的疑惑有所帮助!接下来,请跟着小编...
    99+
    2023-07-02
  • 怎么使用Vue实现一个tab栏切换功能
    本篇内容介绍了“怎么使用Vue实现一个tab栏切换功能”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!一、创建Vue项目首先需要安装Vue C...
    99+
    2023-07-05
  • vue怎么实现动态切换class
    本篇内容介绍了“vue怎么实现动态切换class”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!文件内容----//为item添加不存在的属性...
    99+
    2023-07-04
  • 怎么解决使用vue-router与v-if实现tab切换遇到的问题
    这篇文章主要介绍怎么解决使用vue-router与v-if实现tab切换遇到的问题,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!先上代码,用两种方式实现的效果使用vue-router...
    99+
    2024-04-02
  • mysql主备自动切换怎么实现
    要实现MySQL主备自动切换,可以使用MySQL Replication和MySQL Cluster来实现高可用性。以下是一种实现方...
    99+
    2024-04-09
    mysql
  • 使用vue怎么实现一个用户登录切换功能
    今天就跟大家聊聊有关使用vue怎么实现一个用户登录切换功能,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。Vue的优点Vue具体轻量级框架、简单易学、双向数据绑定、组件化、数据和结构的...
    99+
    2023-06-14
  • vue实现用户登录切换
    本文实例为大家分享了vue实现用户登录切换的具体代码,供大家参考,具体内容如下 切换有问题 代码 <!DOCTYPE html> <html lang="en"...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作