微信小程序实现皮肤功能(夜间模式)


Posted in Javascript onJune 18, 2017

老规矩,先上效果图

微信小程序实现皮肤功能(夜间模式)

微信小程序实现皮肤功能(夜间模式)

个人对夜间模式这个功能情有独钟

晚上黑灯瞎火的看手机,屏幕亮度就算调到最低依然很是刺眼呀

所以我一直用某浏览器,因为有夜间模式

言归正传,依然是分析功能点

      1.点击按钮,切换一套css(这个功能很简单)

      2.把皮肤设置保存到全局变量,在访问其它页面时也能有效果

      3.把设置保存到本地,退出应用再进来时,依然加载上次设置的皮肤

先从切换开始吧,switch很少用,还是贴一下吧

<switch bindchange="switchChange" color ="#F39C89" class="switch"/>
Page({
 data: {
 skinStyle: ""
 },
 onLoad: function (options) {
 },
 switchChange:function(e){
 var that =this
 var style
 //如果开启
 if(e.detail.value == true){
  style="dark"
 }else{
  //否则
  style.skin = ""
 }
 //保存信息
 that.setData({
  skinStyle: style
 })
 }
})

按钮功能OK了,现在我们去写样式

像这种黑的风格的皮肤,大背景色用#000

小背景用#333,文字用#999吧,我也懒得用取色器了

既然需要一套皮肤,那我们就去文件夹外面写一个样式文件

就新建一个skin目录,下面写一个dark.wxss吧

然后呢

我们把普通模式下的wxss复制一份,贴进来

把和颜色有关的属性留下来,其它删除

像background呀,border,color等。。其它统统不要

最后发现就剩这么点了。。

/*夜间模式*/
/****个人信息页面****/
.dark-box{
 background: #000 !important;
}
/*用户信息部分*/
.dark-box .user-box{
 background: #333 !important;
 color: #999;
}
/*列表部分*/
.dark-box .extra-box{
 background: #333 !important;
}
.dark-box .extra-box .extra-item{
 border-bottom: 1px solid #000 !important;
}
.dark-box .extra-box .item-head{
 color: #999;
}
.dark-box .between-box{
 background: #333 !important;
}
.dark-box .between-left{
 background: #333 !important;
}
.dark-box .between-left .item-head{
 color: #999;
}
/****个人信息页面结束****/

大家发现,我这些样式名称都有dark-box

这个dark-box就是最外面,也是最大的盒子(除了默认的page哈)

my-box是普通模式,dark-box就是夜间模式

<view class="my-box {{skinStyle}}-box">

当然你也可以在写一个皮肤样式,黄、红、蓝。。。

现在这个写法,我们只用控制变量 skinStyle的值就能改变皮肤样式了

我们还能写个blue-box的皮肤,然后设置变量为skinStyle为blue就行了

还有关键一步,在wxss文件中把这个皮肤文件引入要显示的页面

@import "../../skin/dark.wxss";

接下来第二步,这就简单了。。

设置到全局变量嘛,先getApp(),然后传过去就行了

var app=getApp()
Page({
 data: {
 skinStyle: ""
 },
 onLoad: function (options) {
 },
 switchChange:function(e){
 var that =this
 //设置全局变量
 if(e.detail.value == true){
  app.globalData.skin="dark"
 }else{
  app.globalData.skin = ""
 }
 that.setData({
  skinStyle: app.globalData.skin
 })
 }
})

现在在访问其它页面的时候,dark皮肤也会传进去

我只写了一个页面哈,所以只有这个页面会有变化

现在第三步了,保存到localstroge中

var app=getApp()
Page({
 data: {
 skinStyle: ""
 },
 onLoad: function (options) {

 },
 switchChange:function(e){
 var that =this

 //设置全局变量
 if(e.detail.value == true){
  app.globalData.skin="dark"
 }else{
  app.globalData.skin = ""
 }
 that.setData({
  skinStyle: app.globalData.skin
 })
 //保存到本地
 wx.setStorage({
  key: "skin",
  data: app.globalData.skin
 })
 }
})

完了吗?并没有。。

我们要在程序打开时就获取皮肤设置

所以要在app.js去get与皮肤相关的信息

getSkin:function(){
 var that =this
 wx.getStorage({
  key: 'skin',
  success: function (res) {
  that.globalData.skin=res.data
  }
 })
 }

现在我们设置黑色皮肤,然后退出,进去之后不是黑色
因为我们在页面加载时没设置

onLoad: function (options) {
  var that =this 
  that.setData({
  skinStyle: app.globalData.skin
  })
 }

现在再来看看

微信小程序实现皮肤功能(夜间模式)

皮肤没问题了

结果按钮的状态是关闭,皮肤却是开着

因为开关重置了

这个就交给大家自己解决啦,启动时判断一下就OK啦

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作能带来一定的帮助,如果有疑问大家可以留言交流,谢谢大家对三水点靠木的支持。

Javascript 相关文章推荐
基于jquery的checkbox下拉框插件代码
Jun 25 Javascript
同一页面多个商品倒计时JS 基于面向对象的javascript
Feb 16 Javascript
IE不支持getElementsByClassName最终完美解决方案
Dec 17 Javascript
jquery中选择块并改变属性值的方法
Jul 31 Javascript
EasyUI实现二级页面的内容勾选的方法
Mar 01 Javascript
js实现接收表单的值并将值拼在表单action后面的方法
Nov 23 Javascript
JavaScript中setTimeout和setInterval函数的传参及调用
Mar 11 Javascript
终于实现了!精彩的jquery弹幕效果
Jul 18 Javascript
JavaScript面向对象精要(下部)
Sep 12 Javascript
vue.js将时间戳转化为日期格式的实现代码
Jun 05 Javascript
vue项目webpack中Npm传递参数配置不同域名接口
Jun 15 Javascript
微信公众号中的JSSDK接入及invalid signature等常见错误问题分析(全面解析)
Apr 11 Javascript
关于javascript作用域的常见面试题分享
Jun 18 #Javascript
Angular.js中下拉框实现渲染html的方法
Jun 18 #Javascript
Webpack打包css后z-index被重新计算的解决方法
Jun 18 #Javascript
利用JavaScript对中文(汉字)进行排序实例详解
Jun 18 #Javascript
JavaScript ES6中const、let与var的对比详解
Jun 18 #Javascript
jquery DataTable实现前后台动态分页
Jun 17 #jQuery
jQuery Jsonp跨域模拟搜索引擎
Jun 17 #jQuery
You might like
Thinkphp调用Image类生成缩略图的方法
2015/03/07 PHP
PHP微信开发之查询城市天气
2016/06/23 PHP
PHP 并发场景的几种解决方案
2019/06/14 PHP
解决php扩展安装不生效问题
2019/10/25 PHP
基于PHP实现生成随机水印图片
2020/12/09 PHP
一直复略了的一个问题,关于表单重复提交
2007/02/15 Javascript
javascript 框架小结 个人工作经验
2009/06/13 Javascript
JavaScript中闭包的写法和作用详解
2016/06/29 Javascript
AngularJs自定义服务之实现签名和加密
2016/08/02 Javascript
javascript实现秒表计时器的制作方法
2017/02/16 Javascript
基于JavaScript canvas绘制贝塞尔曲线
2018/12/25 Javascript
详解Node.js一行命令上传本地文件到服务器
2019/04/22 Javascript
使用layui的router来进行传参的实现方法
2019/09/06 Javascript
Vue自定义全局弹窗组件操作
2020/08/11 Javascript
vue3.0搭配.net core实现文件上传组件
2020/10/29 Javascript
[47:03]Ti4第二日主赛事败者组 LGD vs iG 2
2014/07/21 DOTA
netbeans7安装python插件的方法图解
2013/12/24 Python
Python解决N阶台阶走法问题的方法分析
2017/12/28 Python
详解tensorflow载入数据的三种方式
2018/04/24 Python
基于Numpy.convolve使用Python实现滑动平均滤波的思路详解
2019/05/16 Python
python的sorted用法详解
2019/06/25 Python
在Django admin中编辑ManyToManyField的实现方法
2019/08/09 Python
Python 实现将数组/矩阵转换成Image类
2020/01/09 Python
python实现ftp文件传输功能
2020/03/20 Python
解决Keras中CNN输入维度报错问题
2020/06/29 Python
python 基于selenium实现鼠标拖拽功能
2020/12/24 Python
使用 css3 transform 属性来变换背景图的方法
2019/05/07 HTML / CSS
南非最大的花卉和送礼服务:NetFlorist
2017/09/13 全球购物
财务出纳岗位职责
2014/02/03 职场文书
施工安全承诺书
2014/05/22 职场文书
2014年党员教师自我剖析材料
2014/09/30 职场文书
关于群众路线的心得体会
2014/11/05 职场文书
傲慢与偏见读书笔记
2015/06/29 职场文书
2015年车间管理工作总结
2015/07/23 职场文书
Springboot如何使用logback实现多环境配置?
2021/06/16 Java/Android
python开发人人对战的五子棋小游戏
2022/05/02 Python