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


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 ui resizable bug解决方法
Oct 26 Javascript
IE8的JavaScript点击事件(onclick)不兼容的解决方法
Nov 22 Javascript
Javascript实现获取窗口的大小和位置代码分享
Dec 04 Javascript
json实现前后台的相互传值详解
Jan 05 Javascript
基于jQuery Bar Indicator 插件实现进度条展示效果
Sep 30 Javascript
JavaScript电子时钟倒计时第二款
Jan 10 Javascript
Bootstrap禁用响应式布局的实现方法
Mar 09 Javascript
在bootstrap中实现轮播图实例代码
Jun 11 Javascript
基于Cookie常用操作以及属性介绍
Sep 07 Javascript
jQuery ajax调用webservice注意事项
Oct 08 jQuery
JS实现图片放大镜插件详解
Nov 06 Javascript
vue左侧菜单,树形图递归实现代码
Aug 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
php生成静态文件的多种方法分享
2012/07/17 PHP
php实现12306余票查询、价格查询示例
2014/04/17 PHP
简单理解PHP的面向对象编程方式
2016/05/17 PHP
php+js实现的无刷新下载文件功能示例
2019/08/23 PHP
jquery下jstree简单应用 - v1.0
2011/04/14 Javascript
jQuery EasyUI API 中文文档 - NumberBox数字框
2011/10/13 Javascript
jquery实现的网页自动播放声音
2014/04/30 Javascript
jQuery实现带滚动线条导航效果的方法
2015/01/30 Javascript
angularJS与bootstrap结合实现动态加载弹出提示内容
2015/10/16 Javascript
JavaScript拖拽、碰撞、重力及弹性运动实例分析
2016/01/08 Javascript
React Native使用百度Echarts显示图表的示例代码
2017/11/07 Javascript
Vue用v-for给src属性赋值的方法
2018/03/03 Javascript
vue-cli 默认路由再子路由选中下的选中状态问题及解决代码
2018/09/06 Javascript
微信头像地址失效踩坑记附带解决方案
2019/09/23 Javascript
JS实现多选框的操作
2020/06/24 Javascript
JavaScript实现移动小精灵的案例代码
2020/12/12 Javascript
[05:20]2018DOTA2亚洲邀请赛主赛事第三日战况回顾 LGD率先挺进胜者组决赛
2018/04/06 DOTA
python绘制圆柱体的方法
2018/07/02 Python
彻底理解Python中的yield关键字
2019/04/01 Python
python中tkinter的应用:修改字体的实例讲解
2019/07/17 Python
python 判断txt每行内容中是否包含子串并重新写入保存的实例
2020/03/12 Python
Python socket连接中的粘包、精确传输问题实例分析
2020/03/24 Python
python中plt.imshow与cv2.imshow显示颜色问题
2020/07/16 Python
python 求两个向量的顺时针夹角操作
2021/03/04 Python
详解使用postMessage解决iframe跨域通信问题
2019/11/01 HTML / CSS
个人简历自荐信
2013/12/05 职场文书
银行存款证明样本
2014/01/17 职场文书
烹饪大赛策划方案
2014/05/26 职场文书
房产协议书范本
2014/10/18 职场文书
史上最全书信经典范文大全(建议收藏)
2019/07/10 职场文书
详解JAVA中的OPTIONAL
2021/06/14 Java/Android
HTML5页面音频自动播放的实现方式
2021/06/21 HTML / CSS
详解redis在微服务领域的贡献
2021/10/16 Redis
css3应用示例:新增的选择器
2022/03/16 HTML / CSS
《游戏王:大师决斗》新活动上线 若无符合卡组可免费租用
2022/04/13 其他游戏
python游戏开发Pygame框架
2022/04/22 Python