微信小程序实现换肤功能


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 24 Javascript
JavaScript排序算法之希尔排序的2个实例
Apr 04 Javascript
基于canvas实现的钟摆效果完整实例
Jan 26 Javascript
详解angular中如何监控dom渲染完毕
Jan 03 Javascript
Android中Okhttp3实现上传多张图片同时传递参数
Feb 18 Javascript
一步步教你利用Canvas对图片进行处理
Sep 19 Javascript
简易Vue评论框架的实现(父组件的实现)
Jan 08 Javascript
vue2.0 axios跨域并渲染的问题解决方法
Mar 08 Javascript
基于JS正则表达式实现模板数据动态渲染(实现思路详解)
Mar 07 Javascript
javascript设计模式 ? 命令模式原理与用法实例分析
Apr 20 Javascript
Vue切换Tab动态渲染组件的操作
Sep 21 Javascript
解决Vue项目中tff报错的问题
Oct 21 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网页标题中文乱码的有效解决方法
2014/03/05 PHP
Laravel创建数据库表结构的例子
2019/10/09 PHP
JS上传前预览图片实例
2013/03/25 Javascript
浅析js中的浮点型运算问题
2014/01/06 Javascript
JQuery以JSON方式提交数据到服务端示例代码
2014/05/05 Javascript
node.js中的fs.realpathSync方法使用说明
2014/12/16 Javascript
jQuery中append()方法用法实例
2014/12/25 Javascript
jQuery中children()方法用法实例
2015/01/07 Javascript
jquery UI Datepicker时间控件的使用方法(终结版)
2015/11/07 Javascript
javascript中checkbox使用方法简单实例演示
2015/11/17 Javascript
Bootstrap3.0学习教程之JS折叠插件
2016/05/27 Javascript
Javascript闭包与函数柯里化浅析
2016/06/22 Javascript
js HTML5手机刮刮乐代码
2020/09/29 Javascript
Ionic2系列之使用DeepLinker实现指定页面URL
2016/11/21 Javascript
分享19个JavaScript 有用的简写写法
2017/07/07 Javascript
深入浅出es6模板字符串
2017/08/26 Javascript
JavaScript实现精美个性导航栏筋斗云效果
2017/10/29 Javascript
ES6使用Set数据结构实现数组的交集、并集、差集功能示例
2017/10/31 Javascript
vue动态绑定组件子父组件多表单验证功能的实现代码
2018/05/14 Javascript
Vue过渡效果之CSS过渡详解(结合transition,animation,animate.css)
2020/02/05 Javascript
Angular利用HTTP POST下载流文件的步骤记录
2020/07/26 Javascript
kNN算法python实现和简单数字识别的方法
2014/11/18 Python
python实现telnet客户端的方法
2015/04/15 Python
python删除过期文件的方法
2015/05/29 Python
python 执行shell命令并将结果保存的实例
2018/05/11 Python
python+PyQT实现系统桌面时钟
2020/06/16 Python
使用python Telnet远程登录执行程序的方法
2019/01/26 Python
python空元组在all中返回结果详解
2020/12/15 Python
使用HTML5的链接预取功能(link prefetching)给网站提速
2012/12/13 HTML / CSS
微信html5页面调用第三方位置导航的示例
2018/03/14 HTML / CSS
戴森英国官网:Dyson英国
2019/05/07 全球购物
Linux面试题LINUX系统类
2014/11/19 面试题
经典演讲稿范文
2013/12/30 职场文书
校园广播稿100字
2014/10/06 职场文书
2015年班组工作总结
2015/04/20 职场文书
2016学校先进党组织事迹材料
2016/02/29 职场文书