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


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 相关文章推荐
基于Unit PNG Fix.js有时候在ie6下不正常的解决办法
Jun 26 Javascript
jQuery 实现自动填充邮箱功能(带下拉提示)
Oct 14 Javascript
jQuery使用empty()方法删除元素及其所有子元素的方法
Mar 26 Javascript
最棒的Angular2表格控件
Aug 10 Javascript
bootstrapValidator bootstrap-select验证不可用的解决办法
Jan 11 Javascript
Angular2 组件通信的实例代码
Jun 23 Javascript
Vue AST源码解析第一篇
Jul 19 Javascript
详解vue前后台数据交互vue-resource文档
Jul 19 Javascript
vue实现选项卡及选项卡切换效果
Apr 24 Javascript
解决vue中使用Axios调用接口时出现的ie数据处理问题
Aug 13 Javascript
学习使用ExpressJS 4.0中的新Router的用法
Nov 06 Javascript
小程序实现简单语音聊天的示例代码
Jul 24 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
备份mysql数据库的php代码(一个表一个文件)
2010/05/28 PHP
PHP基于迭代实现文件夹复制、删除、查看大小等操作的方法
2017/08/11 PHP
php nginx 实时输出的简单实现方法
2018/01/21 PHP
php基于协程实现异步的方法分析
2019/07/17 PHP
php5.6.x到php7.0.x特性小结
2019/08/17 PHP
JS学习之一个简易的日历控件
2010/03/24 Javascript
js数组的操作指南
2014/12/28 Javascript
JavaScript中使用Math.floor()方法对数字取整
2015/06/15 Javascript
Vue如何实现组件的源码解析
2017/06/08 Javascript
jQuery选取所有复选框被选中的值并用Ajax异步提交数据的实例
2017/08/04 jQuery
react项目如何使用iconfont的方法步骤
2019/03/13 Javascript
使用js在layui中实现上传图片压缩
2019/06/18 Javascript
浅探express路由和中间件的实现
2019/09/30 Javascript
浅谈JavaScript 声明提升
2020/09/14 Javascript
python正则表达式去掉数字中的逗号(python正则匹配逗号)
2013/12/25 Python
Python的Urllib库的基本使用教程
2015/04/30 Python
Python使用回溯法子集树模板获取最长公共子序列(LCS)的方法
2017/09/08 Python
python TCP Socket的粘包和分包的处理详解
2018/02/09 Python
Scrapy框架爬取西刺代理网免费高匿代理的实现代码
2019/02/22 Python
Python面向对象原理与基础语法详解
2020/01/02 Python
python中return如何写
2020/06/18 Python
解决Python 函数声明先后顺序出现的问题
2020/09/02 Python
python 实现&quot;神经衰弱&quot;翻牌游戏
2020/11/09 Python
python subprocess pipe 实时输出日志的操作
2020/12/05 Python
python中zip()函数遍历多个列表方法
2021/02/18 Python
使用CSS3的box-sizing属性解决div宽高被内边距撑开的问题
2016/06/28 HTML / CSS
佳能加拿大网上商店:Canon eStore Canada
2018/04/04 全球购物
Kiwi.com中国:找到特价机票并发现新目的地
2019/10/27 全球购物
毕业生造价工程师求职信
2013/10/17 职场文书
软件项目实施计划书
2014/05/02 职场文书
环境卫生倡议书
2014/08/29 职场文书
《自然之道》读后感3篇
2019/12/17 职场文书
python爬取豆瓣电影TOP250数据
2021/05/23 Python
anaconda python3.8安装后降级
2021/06/11 Python
mybatis3中@SelectProvider传递参数方式
2021/08/04 Java/Android
javascript之Object.assign()的痛点分析
2022/03/03 Javascript