微信小程序换肤功能实现代码(思路详解)


Posted in Javascript onAugust 25, 2020

微信小程序换肤功能实现代码(思路详解)

在手机、电脑使用频率如此高的当下,应用可以更换皮肤,以提升美观性,并减轻屏幕对眼睛的刺激,无疑对用户体验有很大的帮助

实现功能

要实现如上更换皮肤的效果,有几个思路:
1.准备皮肤相关的wxss,引入到app.wxss中,方便每个页面使用;
2.设置皮肤时,动态改变wxml中元素的类名或id,使页面应用对应的皮肤;
3.将选中皮肤的值保存在小程序本地缓存中,保证其他页面及下一次打开小程序时,页面展示正确的皮肤;
下面介绍一些实现的细节

wxml

<view class="page" id='{{skin}}'> 
 <view class="container">
 	...
 </view>
</view>

wxml部分比较简单,只需要动态切换id即可,注意因为page无法动态设置背景色,所以这里的最外层需要width: 100%;height: 100%;,否则将无法使皮肤铺满页面。

wxss

/* app.wxss主题颜色 */
 
/* 深黑 */
#dark-skin{
 background: #000;
}
#dark-skin .bColor{
 background: #333;
 color: #999;
}
#dark-skin .borderColor{
 border-color:#999;
}
/* 粉红 */
#red-skin{
 background: #f9e5ee;
}
#red-skin .bColor{
 background: #f9e5ee;
 color: #8e5a54;
}
#red-skin .borderColor{
 border-color:#8e5a54;
}
/* 橘黄 */
#yellow-skin{
 background: #f6e1c9;
}
#yellow-skin .bColor{
 background: #f6e1c9;
 color: #8c6031;
}
#yellow-skin .borderColor{
 border-color:#8c6031;
}

写好皮肤对应的颜色样式,直接放入app.wxss中即可,如果样式过多,可以使用单独的wxss文件,方便管理。

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

js

存储选中的皮肤值

//wxml
//<view bindtap="setSkin" data-flag='yellow'>橘黄</view> 
//bindtap事件函数
 setSkin:function(e){
  var skin = e.target.dataset.flag;
 
  this.setData({
   skin: skin + '-skin',
   openSet:false
  })
 
  wx.setStorage({
   key: "skin",
   data: skin + '-skin'
  })
  app.setSkin(this);
 }

这里使用setData使页面立即切换id,使用wx.setStorage存储值,app.setSkin是定义在app.js上的公共方法,下面会有介绍

//app.js
App({
 data: {
 },
 setSkin:function(that){
  wx.getStorage({
   key: 'skin',
   success: function(res) {
    if(res){
     that.setData({
     skin: res.data
    })
     var fcolor = res.data == 'dark-skin' ? '#ffffff' : '#000000',
       obj = {
        'normal-skin':{
         color:'#000000',
         background:'#f6f6f6'
        },
        'dark-skin': {
         color: '#ffffff',
         background: '#000000'
        },
        'red-skin': {
         color: '#8e5a54',
         background: '#f9e5ee'
        },
        'yellow-skin': {
         color: '#8c6031',
         background: '#f6e1c9'
        },
        'green-skin': {
         color: '#5d6021',
         background: '#e3eabb'
        },
        'cyan-skin': {
         color: '#417036',
         background: '#d1e9cd'
        },
        'blue-skin': {
         color: '#2e6167',
         background: '#bbe4e3'
        }
       },
      item = obj[res.data],
      tcolor = item.color,
      bcolor = item.background;
 
     wx.setNavigationBarColor({
      frontColor: fcolor,
      backgroundColor: bcolor,
     })
 
     wx.setTabBarStyle({
      color: tcolor,
      backgroundColor: bcolor,
     })
    }
   }
  })
  }
})

app.setSkin提供给所有页面调用,并通过已有的皮肤颜色,设置头部和导航区域的背景及文字颜色。

打开一个普通wxml页面,并设置皮肤

const app = getApp();
 
Page({
 data: {
  skin: 'normal-skin',
 },
 onLoad: function() {
  app.setSkin(this); 
 },
 onShow:function(){
  app.setSkin(this); 
 }
})

在onLoad及onShow触发时设置皮肤,这里的onShow是为了避免重新设置皮肤时,页面还显示上一次的皮肤,由于首次加载会设置两次,onLoad里的app.setSkin其实可以去掉。

至此,一个精美的设置皮肤功能就实现了,小伙伴们快去试一试吧!

总结

到此这篇关于微信小程序换肤功能实现代码(思路详解)的文章就介绍到这了,更多相关微信小程序换肤内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Javascript 相关文章推荐
JavaScript调用堆栈及setTimeout使用方法深入剖析
Feb 16 Javascript
jQuery查询数据返回object和字符串影响原因是什么
Aug 09 Javascript
jquery实现图片按比例缩放示例
Jul 01 Javascript
jQuery中replaceAll()方法用法实例
Jan 16 Javascript
Ajax中解析Json的两种方法对比分析
Jun 25 Javascript
轻松掌握JavaScript代理模式
Aug 26 Javascript
将JSON字符串转换成Map对象的方法
Nov 30 Javascript
js date 格式化
Feb 15 Javascript
JavaScript通过filereader接口读取文件
May 10 Javascript
如何将 jQuery 从你的 Bootstrap 项目中移除(取而代之使用Vue.js)
Jul 17 jQuery
axios携带cookie配置详解(axios+koa)
Dec 28 Javascript
vue车牌号校验和银行校验实战
Jan 23 Javascript
prettier自动格式化去换行的实现代码
Aug 25 #Javascript
Vue中 axios delete请求参数操作
Aug 25 #Javascript
React实现轮播效果
Aug 25 #Javascript
React实现全选功能
Aug 25 #Javascript
react实现复选框全选和反选组件效果
Aug 25 #Javascript
js实现数字跳动到指定数字
Aug 25 #Javascript
js实现点击选项置顶动画效果
Aug 25 #Javascript
You might like
全国FM电台频率大全 - 6 辽宁省
2020/03/11 无线电
用PHP制作的意见反馈表源码
2007/03/11 PHP
PHP 加密与解密的斗争
2009/04/17 PHP
php的urlencode()URL编码函数浅析
2011/08/09 PHP
PHP面向对象之工作单元(实例讲解)
2017/06/26 PHP
YII2框架中excel表格导出的方法详解
2017/07/21 PHP
PHP实现防盗链的方法分析
2017/07/25 PHP
Laravel框架实现的记录SQL日志功能示例
2018/06/19 PHP
Thinkphp5框架ajax接口实现方法分析
2019/08/28 PHP
用javascript获取地址栏参数
2006/12/22 Javascript
获取css样式表内样式的js函数currentStyle(IE),defaultView(FF)
2011/02/14 Javascript
js原生appendChild的bug解决心得分享
2013/07/01 Javascript
jquery使用EasyUI Tree异步加载JSON数据(生成树)
2017/02/11 Javascript
js实现简单的获取验证码按钮效果
2017/03/03 Javascript
Vue实现点击后文字变色切换方法
2018/02/11 Javascript
使用taro开发微信小程序遇到的坑总结
2019/04/08 Javascript
深入理解令牌认证机制(token)
2019/08/22 Javascript
jQuery实现的上拉刷新功能组件示例
2020/05/01 jQuery
python利用有道翻译实现&quot;语言翻译器&quot;的功能实例
2017/11/14 Python
python 3.5实现检测路由器流量并写入txt的方法实例
2017/12/17 Python
Python基于最小二乘法实现曲线拟合示例
2018/06/14 Python
python实现内存监控系统
2021/03/07 Python
详解python中TCP协议中的粘包问题
2019/03/22 Python
PyQT实现菜单中的复制,全选和清空的功能的方法
2019/06/17 Python
详解python uiautomator2 watcher的使用方法
2019/09/09 Python
Python drop方法删除列之inplace参数实例
2020/06/27 Python
python 调整图片亮度的示例
2020/12/03 Python
css3给背景图片加颜色遮罩的方法
2019/11/05 HTML / CSS
Hotels.com拉丁美洲:从豪华酒店到经济型酒店的预定优惠和折扣
2019/12/09 全球购物
英国排名第一的宠物店:PetPlanet
2020/02/02 全球购物
毕业生的自我鉴定该怎么写
2013/12/02 职场文书
汽车装潢店创业计划书范文
2014/02/05 职场文书
创优争先心得体会
2014/09/11 职场文书
给医院的感谢信
2015/01/21 职场文书
Redis5之后版本的高可用集群搭建的实现
2021/04/27 Redis
英镑符号 £
2022/02/17 杂记