使用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 相关文章推荐
TreeView 用法(有代码)(asp.net)
Jul 15 Javascript
Javascript中各种trim的实现详细解析
Dec 10 Javascript
jquery简单实现鼠标经过导航条改变背景图
Dec 17 Javascript
jQuery插件zoom实现图片全屏放大弹出层特效
Apr 15 Javascript
Javascript实现可旋转的圆圈实例代码
Aug 04 Javascript
js实现具有高亮显示效果的多级菜单代码
Sep 01 Javascript
JS中script标签defer和async属性的区别详解
Aug 12 Javascript
最实用的jQuery分页插件
Oct 09 Javascript
JS中精巧的自动柯里化实现方法
Dec 12 Javascript
ES6基础之解构赋值(destructuring assignment)
Feb 21 Javascript
jquery实现选项卡切换代码实例
May 14 jQuery
seajs和requirejs模块化简单案例分析
Aug 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
全国FM电台频率大全 - 29 青海省
2020/03/11 无线电
PHP中MD5函数使用实例代码
2008/06/07 PHP
PHP利用超级全局变量$_POST来接收表单数据的实例
2016/11/05 PHP
在Javascript中定义对象类别
2006/12/22 Javascript
点图片上一页下一页翻页效果
2008/07/09 Javascript
javascript 新浪背投广告实现代码
2009/07/07 Javascript
JQuery与iframe交互实现代码
2009/12/24 Javascript
js监听表单value的修改同步问题,跨浏览器支持
2009/12/31 Javascript
extjs 如何给column 加上提示
2014/07/29 Javascript
以jQuery中$.Deferred对象为例讲解promise对象是如何处理异步问题
2015/11/13 Javascript
jQuery Ajax 上传文件处理方式介绍(推荐)
2016/06/30 Javascript
基于Vue的文字跑马灯组件(npm 组件包)
2017/05/24 Javascript
JavaScript防止全局变量污染的方法总结
2018/08/02 Javascript
JS中验证整数和小数的正则表达式
2018/10/08 Javascript
微信小程序实现一个简单swiper代码实例
2019/12/30 Javascript
详谈vue中router-link和传统a链接的区别
2020/07/22 Javascript
[05:23]DOTA2-DPC中国联赛2月1日Recap集锦
2021/03/11 DOTA
Python编程中的文件操作攻略
2015/10/16 Python
Python中模块string.py详解
2017/03/12 Python
Python程序退出方式小结
2017/12/09 Python
Python使用smtp和pop简单收发邮件完整实例
2018/01/09 Python
Sanic框架路由用法实例分析
2018/07/16 Python
Python爬虫爬取、解析数据操作示例
2020/03/27 Python
windows10 pycharm下安装pyltp库和加载模型实现语义角色标注的示例代码
2020/05/07 Python
Keras自定义实现带masking的meanpooling层方式
2020/06/16 Python
英国时尚运动品牌的合集:The Sports Edit
2017/12/20 全球购物
工厂门卫岗位职责
2013/11/25 职场文书
店长助理岗位职责
2013/12/13 职场文书
超市端午节活动方案
2014/01/23 职场文书
食品安全承诺书
2014/05/22 职场文书
2014年教师党员自我评议
2014/09/19 职场文书
给女朋友的道歉短信
2015/05/12 职场文书
高中数学课堂教学反思
2016/02/18 职场文书
介绍信应该怎么开?
2019/04/03 职场文书
HTML怎么设置下划线?html文字加下划线方法
2021/12/06 HTML / CSS
Windows Server 2012 R2 磁盘分区教程
2022/04/29 Servers