微信小程序实现换肤功能


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 相关文章推荐
扩展jQuery 键盘事件的几个基本方法
Oct 30 Javascript
JS实现简单的Canvas画图实例
Jul 04 Javascript
jquery数组封装使用方法分享(jquery数组遍历)
Mar 25 Javascript
JSON简介以及用法汇总
Feb 21 Javascript
浅析JavaScript回调函数应用
May 22 Javascript
谈谈React中的Render Props模式
Dec 06 Javascript
浅谈在Vue.js中如何实现时间转换指令
Jan 06 Javascript
服务端预渲染之Nuxt(使用篇)
Apr 08 Javascript
D3.js(v3)+react 实现带坐标与比例尺的柱形图 (V3版本)
May 09 Javascript
js实现计算器功能
Aug 10 Javascript
Vue实现简单计算器
Jan 20 Vue.js
JS实现简易日历效果
Jan 25 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
phpmyadmin中配置文件现在需要绝密的短语密码的解决方法
2007/02/11 PHP
php switch语句多个值匹配同一代码块的实现
2014/03/03 PHP
php使用curl打开https网站的方法
2015/06/17 PHP
php将一维数组转换为每3个连续值组成的二维数组
2016/05/06 PHP
PHP封装的page分页类定义与用法完整示例
2018/12/24 PHP
PHP创建文件及写入数据(覆盖写入,追加写入)的方法详解
2019/02/15 PHP
php中isset与empty函数的困惑与用法分析
2019/07/05 PHP
JQuery 入门实例1
2009/06/25 Javascript
jquery与google map api结合使用 控件,监听器
2010/03/04 Javascript
基于Jquery的将DropDownlist的选中值赋给label的实现代码
2011/05/06 Javascript
IE6、IE7中setAttribute不支持class/for/rowspan/colspan等属性
2011/08/28 Javascript
js加强的经典分页实例
2013/03/15 Javascript
jquery的live使用注意事项
2014/02/18 Javascript
JavaScript获取当前日期是星期几的方法
2015/04/06 Javascript
javascript去掉代码里面的注释
2015/07/24 Javascript
整理Javascript流程控制语句学习笔记
2015/11/29 Javascript
jQuery获得字体颜色16位码的方法
2016/02/20 Javascript
全面解析vue中的数据双向绑定
2017/05/10 Javascript
layui表格实现代码
2017/05/20 Javascript
Javascript中的getter和setter初识
2017/08/17 Javascript
自制简易打赏功能的实例
2017/09/02 Javascript
JS实现的找零张数最小问题示例
2017/11/28 Javascript
Vue2.0点击切换类名改变样式的方法
2018/08/22 Javascript
使用nodeJS中的fs模块对文件及目录进行读写,删除,追加,等操作详解
2020/02/06 NodeJs
JS实现鼠标按下拖拽效果
2020/07/23 Javascript
pandas使用get_dummies进行one-hot编码的方法
2018/07/10 Python
pytorch实现seq2seq时对loss进行mask的方式
2020/02/18 Python
纯CSS改变webkit内核浏览器的滚动条样式
2014/04/17 HTML / CSS
《晚上的太阳》教学反思
2014/04/23 职场文书
干部鉴定材料
2014/05/18 职场文书
大学生自我评价200字(4篇)
2014/09/17 职场文书
总经理2015中秋节致辞
2015/07/29 职场文书
2016学习依法治国心得体会
2016/01/15 职场文书
不会写演讲稿,快来看看这篇文章!
2019/08/06 职场文书
浅谈Python中对象是如何被调用的
2022/04/06 Python
vue实现列表垂直无缝滚动
2022/04/08 Vue.js