微信小程序实现换肤功能


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 相关文章推荐
防止页面被iframe(兼容IE,Firefox火狐)
Jul 04 Javascript
js中判断对象是否为空的三种实现方法
Dec 23 Javascript
Javascript中的String对象详谈
Mar 03 Javascript
jQuery 实现自动填充邮箱功能(带下拉提示)
Oct 14 Javascript
使用js画图之饼图
Jan 12 Javascript
jquery基本选择器匹配多个元素的实现方法
Sep 05 Javascript
javascript入门之数组[新手必看]
Nov 21 Javascript
jQuery ajax实现省市县三级联动
Mar 07 Javascript
Bootstrap table使用方法汇总
Nov 17 Javascript
webpack打包node.js后端项目的方法
Mar 10 Javascript
js实现图片跟随鼠标移动效果
Oct 16 Javascript
Vue.js下拉菜单组件使用方法详解
Oct 19 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读取flv文件的播放时间长度
2009/09/03 PHP
php对二维数组进行排序的简单实例
2013/12/19 PHP
php使用sql server验证连接数据库的方法
2014/12/25 PHP
php实现短信发送代码
2015/07/05 PHP
php实现带读写分离功能的MySQL类完整实例
2016/07/28 PHP
利用jQuery插件扩展识别浏览器内核与外壳的类型和版本的实现代码
2011/10/22 Javascript
Javascript中查找不以XX字符结尾的单词示例代码
2013/10/15 Javascript
Ajax局部更新导致JS事件重复触发问题的解决方法
2014/10/14 Javascript
JS生成不重复的随机数组的简单实例
2016/07/10 Javascript
让DIV的滚动条自动滚动到最底部的3种方法(推荐)
2016/09/24 Javascript
JS当前页面登录注册框,固定DIV,底层阴影的实例代码
2016/09/29 Javascript
基于JavaScript实现下拉列表左右移动代码
2017/02/07 Javascript
微信小程序开发入门基础教程
2017/04/19 Javascript
js实现数组内数据的上移和下移的实例
2017/11/14 Javascript
js断点调试心得分享(必看篇)
2017/12/08 Javascript
利用weixin-java-miniapp生成小程序码并直接返回图片文件流的方法
2019/03/29 Javascript
记一次用vue做的活动页的方法步骤
2019/04/11 Javascript
[59:53]DOTA2-DPC中国联赛 正赛 VG vs Elephant BO3 第二场 3月6日
2021/03/11 DOTA
Python selenium 三种等待方式解读
2016/09/15 Python
Python简单格式化时间的方法【strftime函数】
2016/09/18 Python
Python3对称加密算法AES、DES3实例详解
2018/12/06 Python
python实现扫描ip地址的小程序
2019/04/16 Python
Python+OpenCv制作证件图片生成器的操作方法
2019/08/21 Python
python对数组进行排序,并输出排序后对应的索引值方式
2020/02/28 Python
python RSA加密的示例
2020/12/09 Python
基于Pytorch版yolov5的滑块验证码破解思路详解
2021/02/25 Python
马克华菲官方商城:Mark Fairwhale
2016/09/04 全球购物
工程地质勘察专业大学生求职信
2013/10/13 职场文书
英文自荐信
2013/12/15 职场文书
社区党员先进事迹
2014/01/22 职场文书
项目施工员岗位职责
2014/03/09 职场文书
信访工作经验交流材料
2014/05/23 职场文书
2014年民主评议党员工作总结
2014/12/02 职场文书
北京故宫导游词
2015/01/31 职场文书
工作简报格式范文
2015/07/21 职场文书
节约用水广告语60条
2019/11/14 职场文书