微信小程序实现换肤功能


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 判断判断某个对象是Object还是一个Array
Jan 28 Javascript
原生javascript实现的分页插件pagenav
Aug 28 Javascript
jQuery显示和隐藏 常用的状态判断方法
Jan 29 Javascript
举例讲解JavaScript中将数组元素转换为字符串的方法
Oct 25 Javascript
基于Javascript实现弹出页面效果
Jan 01 Javascript
javascript垃圾收集机制的原理分析
Dec 08 Javascript
js实现带三角符的手风琴效果
Mar 01 Javascript
通过vue-router懒加载解决首次加载时资源过多导致的速度缓慢问题
Apr 08 Javascript
Angularjs中的$apply及优化使用详解
Jul 02 Javascript
Vue项目中使用flow做类型检测的方法
Mar 18 Javascript
微信小程序实现星星评分效果
Nov 01 Javascript
element-ui中el-upload多文件一次性上传的实现
Dec 02 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 form 表单传参明细研究
2009/07/17 PHP
在WAMP环境下搭建ZendDebugger php调试工具的方法
2011/07/18 PHP
将博客园(cnblogs.com)数据导入到wordpress的代码
2013/01/06 PHP
js限制checkbox勾选的个数以及php获取多个checkbbox的方法深入解析
2013/07/18 PHP
自定义min版smarty模板引擎MinSmarty.class.php文件及用法
2016/05/20 PHP
TP5.0框架实现无限极回复功能的方法分析
2019/05/04 PHP
简单对比分析JavaScript中的apply,call与this的使用
2015/12/04 Javascript
vuejs父子组件通信的问题
2017/01/11 Javascript
JS 实现 ajax 异步浏览器兼容问题
2017/01/21 Javascript
echarts学习笔记之图表自适应问题详解
2017/11/22 Javascript
vue select二级联动第二级默认选中第一个option值的实例
2018/01/10 Javascript
vue基础之事件v-onclick=&quot;函数&quot;用法示例
2019/03/11 Javascript
js实现web调用摄像头 js截取视频画面
2019/04/21 Javascript
python 中文乱码问题深入分析
2011/03/13 Python
python中引用与复制用法实例分析
2015/06/04 Python
python+selenium开发环境搭建图文教程
2017/08/11 Python
python之pandas用法大全
2018/03/13 Python
PyQt5实现无边框窗口的标题拖动和窗口缩放
2018/04/19 Python
python实现图书馆研习室自动预约功能
2018/04/27 Python
PyQt 实现使窗口中的元素跟随窗口大小的变化而变化
2019/06/18 Python
解决Python安装时报缺少DLL问题【两种解决方法】
2019/07/15 Python
Python学习笔记之列表推导式实例分析
2019/08/13 Python
python中执行smtplib失败的处理方法
2020/07/01 Python
HTML5是什么 HTML5是什么意思 HTML5简介
2012/10/26 HTML / CSS
英国领先的体验日提供商:Buyagift
2019/04/19 全球购物
Pamela Love官网:纽约设计师Pamela Love的精美、时尚和穿孔珠宝
2020/10/19 全球购物
一些.net面试题
2014/10/06 面试题
中级会计职业生涯规划范文
2014/01/16 职场文书
大学活动总结范文
2014/04/29 职场文书
2014小学教师个人工作总结
2014/11/10 职场文书
学校2014年度工作总结
2014/12/06 职场文书
工作试用期自我评价
2015/03/10 职场文书
2015年节能降耗工作总结
2015/05/22 职场文书
慰问信(范文3篇)
2019/10/23 职场文书
如何利用Matlab制作一款真正的拼图小游戏
2021/05/11 Python
如何利用 CSS Overview 面板重构优化你的网站
2021/10/24 HTML / CSS