微信小程序实现换肤功能


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 相关文章推荐
一些mootools的学习资源
Feb 07 Javascript
基于jquery的3d效果实现代码
Mar 23 Javascript
浅谈javascript中的DOM方法
Jul 16 Javascript
jquery实现漂亮的二级下拉菜单代码
Aug 26 Javascript
jQuery简单操作cookie的插件实例
Jan 13 Javascript
JS实现刷新父页面不弹出提示框的方法
Jun 22 Javascript
JavaScript重定向URL参数的两种方法小结
Oct 19 Javascript
setTimeout学习小结
Feb 08 Javascript
vue 项目如何引入微信sdk接口的方法
Dec 18 Javascript
axios发送post请求springMVC接收不到参数的解决方法
Mar 05 Javascript
Vue源码探究之状态初始化
Nov 14 Javascript
vue 解决遍历对象显示的顺序不对问题
Nov 07 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实现根据图片色界在不同位置加水印的方法
2015/08/08 PHP
PHP 接入微信扫码支付总结(总结篇)
2016/11/03 PHP
浅谈php中的访问修饰符private、protected、public的作用范围
2016/11/20 PHP
PHP第三方登录―QQ登录实现方法
2017/02/06 PHP
JavaScript 事件系统
2010/07/22 Javascript
jQuery过滤选择器详解
2015/01/13 Javascript
JavaScript实现计算字符串中出现次数最多的字符和出现的次数
2015/03/12 Javascript
jQuery获取页面元素绝对与相对位置的方法
2015/06/10 Javascript
jquery获取css的color值返回RGB的方法
2015/12/18 Javascript
jQuery与Ajax以及序列化
2016/02/01 Javascript
Javascript实现图片加载从模糊到清晰显示的方法
2016/06/21 Javascript
详解AngularJs路由之Ui-router-resolve(预加载)
2017/06/13 Javascript
React 高阶组件入门介绍
2018/01/11 Javascript
JS中使用cavas截图网页并解决跨域及模糊问题
2018/11/13 Javascript
JS实现判断移动端PC端功能
2020/02/21 Javascript
浅谈JavaScript窗体Window.ShowModalDialog使用
2020/07/22 Javascript
让你30分钟快速掌握vue3教程
2020/10/26 Javascript
vue3.0+vue-router+element-plus初实践
2020/12/02 Vue.js
[02:34]肉山说——泡妞篇
2014/09/16 DOTA
[00:32]DOTA2上海特级锦标赛 COL战队宣传片
2016/03/04 DOTA
浅谈python类属性的访问、设置和删除方法
2016/07/25 Python
理解Python中的绝对路径和相对路径
2017/08/30 Python
python TKinter获取文本框内容的方法
2018/10/11 Python
解决django model修改添加字段报错的问题
2019/11/18 Python
Python基于paramunittest模块实现excl参数化
2020/04/26 Python
python全栈开发语法总结
2020/11/22 Python
菲律宾领先的在线时尚商店:Zalora菲律宾
2018/02/08 全球购物
阿玛瑞酒店中文官方网站:Amari.com
2018/02/13 全球购物
写给妈妈的道歉信
2014/01/11 职场文书
幼儿园国庆节活动方案
2014/02/01 职场文书
导师工作推荐信范文
2014/05/17 职场文书
2014年管理工作总结
2014/11/22 职场文书
工人先锋号事迹材料
2014/12/24 职场文书
大学班干部竞选稿
2015/11/20 职场文书
openGauss数据库JDBC环境连接配置的详细过程(Eclipse)
2022/06/01 Java/Android
SQL Server数据库的三种创建方法汇总
2023/05/08 MySQL