微信小程序实现换肤功能


Posted in Javascript onMarch 14, 2018

pc或者移动端实现换肤功能还是比较简单的,大致就是需要换肤的css,还有正常的css;把当前皮肤类型存入本地;然后通过js读取并判断当前应该加载哪套css。

由于微信小程序没有操作wxss的api,所以实现的方式有点不一样,大致如下:

1.需要换肤的wxss,正常的wxss。

2.每个页面都引入换肤的wxss(因为换肤每个页面都需要改变)。

3.在app.js的globalData里设置默认的皮肤类型。

4.每个页面onload的时候,读取storage里的数据并设置当前皮肤类型的值。

例子:

第一步:结构

<view class='page' id='{{SkinStyle}}'>
 <view class='header'>
  <view class='h-skin iconfont {{SkinStyle!=="normal"?"icon-moon":"icon-sun"}}' bindtap='bgBtn'></view>  
 </view>
</view>

备注:由于不能直接操作微信小程序的根节点page,要实现全屏背景色的修改,只能模仿一个高度宽度都是100%的div(view)。上面就是class为page的这个div(view)。

 id='{{SkinStyle}}',设置id是为了根据当前皮肤类型,让皮肤的wxss样式的权重大于正常wxss样式的权重,这样有时候就没必要加上!important了。

 根节点page需要在wxss中设置width:100%;height:100%。然后设置class为page的div(view)宽高都是100%。这样就相当于有个能操作的根节点page了。

 {{SkinStyle!=="normal"?"icon-moon":"icon-sun"}}这句是判断当前的皮肤类型,如果是normal就是icon-sun,否则就是icon-moon。 

第二步:样式wxss

皮肤wxss:

#dark {
 background: #333;
}
#dark .header .h-skin{
 color: white;
}

正常wxss:

.page .header .h-skin {
 color: #060505;
 padding: 0 32rpx;
 font-size: 40rpx;
}

 公用wxss:

page {
 height: 100%;
 width: 100%;
}
.page {
 width: 100%;
 height: 100%;
}

备注:这分别是三个文件。皮肤是theme.wxss,正常是index.wxss,公用是com.wxss

 因为换肤是所有页面都变化,所以我建议把皮肤的wxss文件 @import "../theme-bg/theme";  加载到com.wxss文件中。然后每个页面的wxss都@import这个公用的com.wxss文件。

第三步:js

首先:在app.js的文件中,Page里的globalData中设置:skin:"normal";即默认为normal皮肤

然后:在切换皮肤按钮的页面,添加切换按钮的点击事件bgBtn:

var app=getApp();
Page({
 data:{
   SkinStyle:"normal"  //这里其实可以不要
 }, 
 bgBtn:function(){
  if (this.data.SkinStyle==="normal"){
   app.globalData.skin = "dark"; //设置app()中皮肤的类型
   this.setData({
    SkinStyle: app.globalData.skin //设置SkinStyle的值
   })
   wx.setStorage({   //设置storage
   
key: 'skins',
  
 
data: app.globalData.skin,
  
 })
  }else{
   app.globalData.skin="normal";
   this.setData({
    SkinStyle: "normal"
   })
   wx.setStorage({
  
 
key: 'skins',
  
 
data: app.globalData.skin,
  
 })   
  }  
 }
})

最后:在每个页面,包括切换皮肤的页面的Page中的onLoad事件里,读取storage并设置SkinStyle的值:

onLoad: function (options) { 
 var that=this;
 wx.getStorage({
 key: 'skins',
 success: function(res) {
  that.setData({
   SkinStyle: res.data
  })
 },
 })
}

这样每次启动都能自动设置上一次设置的皮肤了。

最终效果图:

微信小程序实现换肤功能

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
this和执行上下文实现代码
Jul 01 Javascript
JavaScript 内置对象属性及方法集合
Jul 04 Javascript
在iframe里的页面编写js,实现在父窗口上创建动画效果展开和收缩的div(不变动iframe父窗口代码)
Dec 20 Javascript
我的Node.js学习之路(四)--单元测试
Jul 06 Javascript
jQuery新的事件绑定机制on()示例应用
Jul 18 Javascript
JavaScript获取网页中第一个图片id的方法
Apr 03 Javascript
js弹出对话框方式小结
Nov 17 Javascript
jQuery formValidator表单验证
Jan 07 Javascript
JavaScript使用键盘输入控制实现数字验证功能
Aug 19 Javascript
javascript 四十条常用技巧大全
Sep 09 Javascript
动态JavaScript所造成一些你不知道的危害
Sep 25 Javascript
详解阿里Node.js技术文档之process模块学习指南
Jan 04 Javascript
Angular4集成ng2-file-upload的上传组件
Mar 14 #Javascript
iview table高度动态设置方法
Mar 14 #Javascript
vue2.0安装style/css loader的方法
Mar 14 #Javascript
Vue2.0 事件的广播与接收(观察者模式)
Mar 14 #Javascript
vue项目国际化vue-i18n的安装使用教程
Mar 14 #Javascript
Vue使用mixins实现压缩图片代码
Mar 14 #Javascript
vue2.0模拟锚点的实例
Mar 14 #Javascript
You might like
PHP脚本的10个技巧(2)
2006/10/09 PHP
php strrpos()与strripos()函数
2013/08/31 PHP
PHP下获取上个月、下个月、本月的日期(strtotime,date)
2014/02/02 PHP
ThinkPHP3.1.3版本新特性概述
2014/06/19 PHP
php foreach正序倒序输出示例代码
2014/07/01 PHP
Yii2中DropDownList简单用法示例
2016/07/18 PHP
功能强大的php分页函数
2016/07/20 PHP
Yii2创建控制器(createController)方法详解
2016/07/23 PHP
PHP实现权限管理功能示例
2017/09/22 PHP
兼容Mozilla必须知道的知识。
2007/01/09 Javascript
jquery衣服颜色选取插件效果代码分享
2015/08/28 Javascript
Bootstrap 设置datetimepicker在屏幕上面弹出设置方法
2017/03/21 Javascript
vue+php实现的微博留言功能示例
2019/03/16 Javascript
详解async/await 异步应用的常用场景
2019/05/13 Javascript
js new Date()实例测试
2019/10/31 Javascript
node.js中stream流中可读流和可写流的实现与使用方法实例分析
2020/02/13 Javascript
一篇文章带你搞懂Vue虚拟Dom与diff算法
2020/08/25 Javascript
详解VUE中的插值( Interpolation)语法
2020/10/18 Javascript
vue element实现表格合并行数据
2020/11/30 Vue.js
Python设计实现的计算器功能完整实例
2017/08/18 Python
Python跨文件全局变量的实现方法示例
2017/12/10 Python
Django 通过JS实现ajax过程详解
2019/07/30 Python
python中的&amp;&amp;及||的实现示例
2019/08/07 Python
Python的pygame安装教程详解
2020/02/10 Python
Matplotlib使用Cursor实现UI定位的示例代码
2020/03/12 Python
用纯CSS3实现网页中常见的小箭头
2017/10/16 HTML / CSS
台湾乐天市场:日本No.1的网路购物网站
2017/03/22 全球购物
采购部经理岗位职责
2014/02/10 职场文书
《特殊的葬礼》教学反思
2014/04/27 职场文书
2014年“向国旗敬礼”网上签名寄语活动方案
2014/09/27 职场文书
医院护士工作检讨书
2014/10/26 职场文书
体育活动总结
2015/02/04 职场文书
培训通知
2015/04/17 职场文书
解析:创业计划书和商业计划书二者之间到底有什么区别
2019/08/14 职场文书
详解JavaScript中的执行上下文及调用堆栈
2021/04/29 Javascript
vue postcss-px2rem 自适应布局
2022/05/15 Vue.js