微信小程序实现换肤功能


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 相关文章推荐
javascript AutoScroller 函数类
May 29 Javascript
基于jquery的获取mouse坐标插件的实现代码
Apr 01 Javascript
js通过googleAIP翻译PHP系统的语言配置的实现代码
Oct 17 Javascript
Javascript 面向对象(二)封装代码
May 23 Javascript
jquery 实现checkbox全选,反选,全不选等功能代码(奇数)
Oct 24 Javascript
javascript特殊用法示例介绍
Nov 29 Javascript
js unicode 编码解析关于数据转换为中文的两种方法
Apr 21 Javascript
extjs 时间范围选择自动判断的实现代码
Jun 24 Javascript
js动态添加onclick事件可传参数与不传参数
Jul 29 Javascript
js仿3366小游戏选字游戏
Apr 14 Javascript
JavaScript原生编写《飞机大战坦克》游戏完整实例
Jan 04 Javascript
JavaScript实现的浏览器下载文件的方法
Aug 09 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 操作文件的一些FAQ总结
2009/02/12 PHP
Yii视图CGridView实现操作按钮定义地址示例
2016/07/14 PHP
Aster vs Newbee BO5 第二场2.19
2021/03/10 DOTA
window.location的重写及判断location是否被重写
2014/09/04 Javascript
jquery表单验证需要做些什么
2015/11/17 Javascript
Bootstrap入门书籍之(三)栅格系统
2016/02/17 Javascript
浅谈JavaScript 函数参数传递到底是值传递还是引用传递
2016/08/23 Javascript
JS 事件绑定、事件监听、事件委托详细介绍
2016/09/28 Javascript
node.js实现微信JS-API封装接口的示例代码
2017/09/06 Javascript
jQuery实现的简单无刷新评论功能示例
2017/11/08 jQuery
vue使用 better-scroll的参数和方法详解
2018/01/25 Javascript
react router4+redux实现路由权限控制的方法
2018/05/03 Javascript
javaScript实现游戏倒计时功能
2018/11/17 Javascript
JS实现简单日历特效
2020/01/03 Javascript
基于JavaScript判断两个对象内容是否相等
2020/01/10 Javascript
Vue.js使用axios动态获取response里的data数据操作
2020/09/08 Javascript
[41:52]2018DOTA2亚洲邀请赛3月29日小组赛B组Effect VS Secret
2018/03/30 DOTA
Python的subprocess模块总结
2014/11/07 Python
Python实现统计英文单词个数及字符串分割代码
2015/05/28 Python
Python Pandas找到缺失值的位置方法
2018/04/12 Python
OpenCV python sklearn随机超参数搜索的实现
2020/01/17 Python
在python tkinter界面中添加按钮的实例
2020/03/04 Python
python实现梯度法 python最速下降法
2020/03/24 Python
python随机模块random的22种函数(小结)
2020/05/15 Python
Boden美国官网:英伦原创时装品牌
2017/07/03 全球购物
英国假发网站:Hothair
2018/02/23 全球购物
SIDESTEP荷兰:在线购买鞋子
2019/11/18 全球购物
用Python匹配HTML tag的时候,<.*>和<.*?>有什么区别
2012/11/04 面试题
旅游管理毕业生自荐书
2014/02/02 职场文书
大学毕业感言100字
2014/02/03 职场文书
cf收人广告词
2014/03/14 职场文书
读书活动总结
2014/04/28 职场文书
七一建党日演讲稿
2014/09/05 职场文书
物流管理专业推荐信
2014/09/06 职场文书
2014最新股权信托合同协议书
2014/11/18 职场文书
2016年妇联“6﹒26国际禁毒日”宣传活动总结
2016/04/05 职场文书