微信小程序实现换肤功能


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 相关文章推荐
excel操作之Add Data to a Spreadsheet Cell
Jun 12 Javascript
js replace替换所有匹配的字符串
Feb 13 Javascript
在ASP.NET MVC项目中使用RequireJS库的用法示例
Feb 15 Javascript
JavaScript头像上传插件源码分享
Mar 29 Javascript
JS动态插入并立即执行回调函数的方法
Apr 21 Javascript
Javascript中字符串和数字的操作方法整理
Jan 22 Javascript
bootstrap实现点击删除按钮弹出确认框的实例代码
Aug 16 Javascript
vue服务端渲染缓存应用详解
Sep 12 Javascript
vue 中Virtual Dom被创建的方法
Apr 15 Javascript
Node.js Domain 模块实例详解
Mar 18 Javascript
javascript绘制简单钟表效果
Apr 07 Javascript
如何HttpServletRequest文件对象并储存
Aug 14 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
ThinkPHP通过AJAX返回JSON的两种实现方法
2014/12/18 PHP
PHP借助phpmailer发送邮件
2015/05/11 PHP
YII框架常用技巧总结
2019/04/27 PHP
Laravel 5.1 框架Blade模板引擎用法实例分析
2020/01/04 PHP
jquery实现弹出窗口效果的实例代码
2013/11/28 Javascript
JS实现动态移动层及拖动浮层关闭的方法
2015/04/30 Javascript
JavaScript和HTML DOM的区别与联系及Javascript和DOM的关系
2015/11/15 Javascript
JavaScript计算值然后把值嵌入到html中的实现方法
2016/10/29 Javascript
Bootstrap Table使用心得总结
2016/11/29 Javascript
BootStrap轮播HTML代码(推荐)
2016/12/10 Javascript
jQuery Ajax 实现在html页面实时显示用户登录状态
2016/12/30 Javascript
JS获取一个表单字段中多条数据并转化为json格式
2017/10/17 Javascript
JS中的事件委托实例浅析
2018/03/22 Javascript
使用Vue如何写一个双向数据绑定(面试常见)
2018/04/20 Javascript
在 Vue 项目中引入 tinymce 富文本编辑器的完整代码
2018/05/04 Javascript
全面解析vue router 基本使用(动态路由,嵌套路由)
2018/09/02 Javascript
python实现的一个火车票转让信息采集器
2014/07/09 Python
python MySQLdb Windows下安装教程及问题解决方法
2015/05/09 Python
python基础之入门必看操作
2017/07/26 Python
python抓取京东小米8手机配置信息
2018/11/13 Python
Django页面数据的缓存与使用的具体方法
2019/04/23 Python
Pandas 重塑(stack)和轴向旋转(pivot)的实现
2019/07/22 Python
Pandas —— resample()重采样和asfreq()频度转换方式
2020/02/26 Python
Pytorch上下采样函数--interpolate用法
2020/07/07 Python
针对HTML5的Web Worker使用攻略
2015/07/12 HTML / CSS
HTML5微信播放全屏问题的解决方法
2017/03/09 HTML / CSS
荷兰最大的鞋子、服装和运动折扣店:Bristol
2021/01/07 全球购物
中专生职业生涯规划书范文
2014/01/10 职场文书
25岁生日感言
2014/01/13 职场文书
高三家长寄语
2014/04/03 职场文书
数控专业毕业生求职信
2014/06/12 职场文书
幽默自我介绍演讲稿
2014/08/21 职场文书
运动会400米加油稿(8篇)
2014/09/22 职场文书
2015年保险公司个人工作总结
2015/05/22 职场文书
高一军训感想
2015/08/07 职场文书
pandas中DataFrame重置索引的几种方法
2021/05/24 Python