微信小程序实现换肤功能


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 相关文章推荐
根据判断浏览器类型屏幕分辨率自动调用不同CSS的代码
Feb 22 Javascript
jquery将一个表单序列化为一个对象的方法
Jan 03 Javascript
Jquery跳到页面指定位置的方法
May 12 Javascript
Vue.js每天必学之数据双向绑定
Sep 05 Javascript
angularjs指令之绑定策略(@、=、&amp;)
Apr 13 Javascript
JavaScript实现图片拖曳效果
Sep 08 Javascript
vue项目tween方法实现返回顶部的示例代码
Mar 02 Javascript
详解使用create-react-app快速构建React开发环境
May 16 Javascript
使用vue.js在页面内组件监听scroll事件的方法
Sep 11 Javascript
vue防止花括号{{}}闪烁v-text和v-html、v-cloak用法示例
Mar 13 Javascript
原生JS与JQ获取元素的区别详解
Feb 13 Javascript
JS轮播图的实现方法
Aug 24 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
用mysql触发器自动更新memcache的实现代码
2009/10/11 PHP
PHP 根据IP地址控制访问的代码
2010/04/22 PHP
php中CI操作多个数据库的代码
2012/07/05 PHP
php while循环控制的简单实例
2016/05/30 PHP
浅谈php中fopen不能创建中文文件名文件的问题
2017/02/06 PHP
PHP实现的杨辉三角求解算法分析
2019/03/11 PHP
laravel5.6中的外键约束示例
2019/10/23 PHP
Prototype使用指南之array.js
2007/01/10 Javascript
关于页面嵌入swf覆盖div层的问题的解决方法
2014/02/11 Javascript
JS实现生成会变大变小的圆环实例
2015/08/05 Javascript
JavaScript学习笔记之ES6数组方法
2016/03/25 Javascript
Vue.js基础知识汇总
2016/04/27 Javascript
微信小程序 生命周期详解
2016/10/12 Javascript
微信小程序开发(二)图片上传+服务端接收详解
2017/01/11 Javascript
vue 设置路由的登录权限的方法
2018/07/03 Javascript
在Vue中获取组件声明时的name属性方法
2018/09/12 Javascript
BootStrap模态框闪退问题实例代码详解
2018/12/10 Javascript
javascript for循环性能测试示例
2019/08/07 Javascript
[00:32]2018DOTA2亚洲邀请赛VG出场
2018/04/03 DOTA
寻找网站后台地址的python脚本
2014/09/01 Python
使用grappelli为django admin后台添加模板
2014/11/18 Python
Python实现的朴素贝叶斯分类器示例
2018/01/06 Python
详解Python安装scrapy的正确姿势
2018/06/26 Python
Python实现常见的回文字符串算法
2018/11/14 Python
python GUI库图形界面开发之PyQt5日期时间控件QDateTimeEdit详细使用方法与实例
2020/02/27 Python
Python pymsql模块的使用
2020/09/07 Python
python利用opencv保存、播放视频
2020/11/02 Python
开放系统互连参考模型
2016/06/29 面试题
土木工程求职信
2014/05/29 职场文书
学校食堂食品安全责任书
2014/07/28 职场文书
工会优秀工作者事迹
2014/08/17 职场文书
农村文化活动总结
2014/08/28 职场文书
售房协议书范本2014
2014/10/23 职场文书
具结保证书
2015/01/17 职场文书
任命书标准格式
2015/03/02 职场文书
2015年政教主任工作总结
2015/07/23 职场文书