使用vue + less 实现简单换肤功能的示例


Posted in Javascript onFebruary 21, 2018

做的换肤效果比较简单,只是顶部导航背景色的改变。下面是效果图。

使用vue + less 实现简单换肤功能的示例 

首先,先说一下我最初的思路。

我最初的想法是使用less定义变量,然后通过js来切换变量,通过切换的变量来达到换肤的效果。

我先新建了一个 theme.less文件,代码如下:

@theme:@themea;
 @themea:pink;
 @themeb:blue;
 @themec:gray;

如我最开始的想法,应该是通过点击事件来改变变量 @theme 的值。

我用了element-ui这个框架,所以我的下拉菜单的代码也不复杂:

<el-dropdown class="colorBtn " trigger="click" @command="changeColor">
 <span class="el-dropdown-link " >换肤</span>
 <el-dropdown-menu slot="dropdown">
 <el-dropdown-item command="a" @click="change_type(a)">梦幻粉</el-dropdown-item>
 <el-dropdown-item command="b" @click="change_type(b)">天空蓝</el-dropdown-item>
 <el-dropdown-item command="c" @click="change_type(c)">雾霾灰</el-dropdown-item>
 </el-dropdown-menu>
</el-dropdown>

点击事件的回调事件绑定在command事件,我定义了一个changeColor的方法

changeColor(command){
  console.log(command);//能获取到当前点击的元素的command
 }

于是,问题来了,我怎么通过点击事件来改变@theme的值呢?我陷入了沉(搜)思(索)……

终于找到了一个迂回解决问题的方法,其实一开始的想法也没有问题,但是需要再包装一层。怎么包装呢?我们虽然暂时控制不了变量值,但是我们可以控制元素的类名。

我们可以将换肤的部分抽出来用less函数来表示,将theme.less代码改成下面代码

其中 @backcolor是背景色,@fcolor是字体颜色

.theme(@backcolor:#EEA2AD,@fcolor:#fff) {
 .header {
 color: @fcolor;
 background: @backcolor;
 width: 100%;
 height: 2rem;
 position: relative;

 h4 {
  width: 100%;
  text-align: center;
  line-height: 2rem;
  font-size: 1rem;
 }
 .go-back {
  width: 2rem;
  height: 2rem;
  text-align: center;
  color: #fff;
  font-size: 0.8rem;
  float: left;
  line-height: 2rem;
  margin-left: 1rem;
  position: absolute;
  left: 0;
  top: 0;
 }
 .header-cont {
  width: 100%;
  text-align: center;
  line-height: 2rem;
  font-size: 1rem;
  color: #fff;
 }
 .colorBtn {
  width: 2rem;
  height: 2rem;
  text-align: center;
  color: #fff;
  font-size: 0.8rem;
  line-height: 2rem;
  margin-right: 1rem;
  position: absolute;
  top: 0;
  right: 0;
 }
 }
}

新建一个color.less,设置几种不同的皮肤样式。这里不同的皮肤样式,我用themea,themeb,themec….来表示,对应组件中的command值。当我点击粉色的时候,调用相应的函数给元素添加相对应的类名。不要忘记引用 theme.less

@import url('./theme.less');
  .themea{
   .theme();//默认的样式
  }
  .themeb{
   .theme(blue,#fff);
  }
  .themec{
   .theme(#111,#999);
  }

当点击换肤的下拉菜单时,调用的changeColor方法需要给元素添加不同的类名,当然color.less文件记得引用。

changeColor(command){
  console.log(command);
  document.getElementById('app').className ='theme'+command ;
 }

在这一块的时候,刚开始我也遇到一个问题,就是我刚开始只将这个页面的样式单独抽了出来,所以其他组件的头部样式并没有改变。我的第一个想法竟然是使用cookie,额,后来想着既然是单页面,那我将样式绑定在比较顶层的元素上,是不是可以?

结果,显而易见!!!

如果要记住上一次换的皮肤,我使用的是localStorage,将每次点击换肤的主题记录下来,然后再页面渲染之前判断是否有这个主题就可以了。效果如下

使用vue + less 实现简单换肤功能的示例 

以上这篇使用vue + less 实现简单换肤功能的示例就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
070823更新的一个[消息提示框]组件 兼容ie7
Aug 29 Javascript
JS:window.onload的使用介绍
Nov 13 Javascript
关闭页面window.location事件未执行的原因及解决方法
Sep 01 Javascript
babel之配置文件.babelrc入门详解
Feb 22 Javascript
vuejs实现ready函数加载完之后执行某个函数的方法
Aug 31 Javascript
vue 中Virtual Dom被创建的方法
Apr 15 Javascript
Vue使用lodop实现打印小结
Jul 06 Javascript
微信小程序官方动态自定义底部tabBar的例子
Sep 04 Javascript
JS多个异步请求 按顺序执行next实现解析
Sep 16 Javascript
webpack3升级到webpack4遇到问题总结
Sep 30 Javascript
JS插入排序简单理解与实现方法分析
Nov 25 Javascript
QT与javascript交互数据的实现
May 26 Javascript
利用angular、react和vue实现相同的面试题组件
Feb 19 #Javascript
jQuery实现滚动到底部时自动加载更多的方法示例
Feb 18 #jQuery
Angular实现的进度条功能示例
Feb 18 #Javascript
Angular2.0实现modal对话框的方法示例
Feb 18 #Javascript
JS实现运动缓冲效果的封装函数示例
Feb 18 #Javascript
Vue底层实现原理总结
Feb 17 #Javascript
js实现控制文件拖拽并获取拖拽内容功能
Feb 17 #Javascript
You might like
php 将excel导入mysql
2009/11/09 PHP
抓取并下载CSS中所有图片文件的php代码
2011/09/26 PHP
php selectradio和checkbox默认选择的实现方法详解
2013/06/29 PHP
PHP实现远程下载文件到本地
2015/05/17 PHP
PHP实现动态获取函数参数的方法示例
2018/04/02 PHP
JavaScript正则表达式中的ignoreCase属性使用详解
2015/06/16 Javascript
javascript的列表切换【实现代码】
2016/05/03 Javascript
AngularJS入门教程之 XMLHttpRequest实例讲解
2016/07/27 Javascript
AngularJS入门教程之Select(选择框)详解
2016/07/27 Javascript
javascript的几种写法总结
2016/09/30 Javascript
JavaScript中的 attribute 和 jQuery中的 attr 方法浅析
2017/01/04 Javascript
原生js实现水平方向无缝滚动
2017/01/10 Javascript
JavaScript高阶函数_动力节点Java学院整理
2017/06/28 Javascript
jquery.rotate.js实现可选抽奖次数和中奖内容的转盘抽奖代码
2017/08/23 jQuery
小程序实现授权登陆的解决方案
2018/12/02 Javascript
详解React 服务端渲染方案完美的解决方案
2018/12/14 Javascript
vue+element树组件 实现树懒加载的过程详解
2019/10/21 Javascript
jquery制作的移动端购物车效果完整示例
2020/02/24 jQuery
vue相关配置文件详解及多环境配置详细步骤
2020/05/19 Javascript
手把手带你搭建一个node cli的方法示例
2020/08/07 Javascript
js调用网络摄像头的方法
2020/12/05 Javascript
Python语言实现百度语音识别API的使用实例
2017/12/13 Python
取numpy数组的某几行某几列方法
2018/04/03 Python
python操作docx写入内容,并控制文本的字体颜色
2020/02/13 Python
Python基于network模块制作电影人物关系图
2020/06/19 Python
python中四舍五入的正确打开方式
2021/01/18 Python
纯css3实现鼠标经过图片显示描述的动画效果
2014/09/01 HTML / CSS
生物有机护肤品:Aurelia Probiotic Skincare
2018/01/31 全球购物
大唐电信科技股份有限公司java工程师面试经历
2016/12/09 面试题
Linux如何修改文件和文件夹的权限
2013/09/05 面试题
师范生实习的个人自我鉴定
2013/10/20 职场文书
高三毕业典礼主持词
2014/03/27 职场文书
2014年维修工作总结
2014/11/22 职场文书
2014年环境卫生工作总结
2014/11/24 职场文书
小鞋子观后感
2015/06/05 职场文书
2019职场实习报告该怎么写?
2019/07/01 职场文书