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


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 UrlDecode函数代码
Jan 09 Javascript
cnblogs中在闪存中屏蔽某人的实现代码
Nov 14 Javascript
基于jQuery.Validate验证库知识点的详解
Apr 26 Javascript
jQuery中校验时间格式的正则表达式小结
Sep 22 Javascript
jQuery实现本地预览上传图片功能
Jan 08 Javascript
javascript中apply、call和bind的使用区别
Apr 05 Javascript
js贪吃蛇游戏实现思路和源码
Apr 14 Javascript
深入浅析javascript中的作用域(推荐)
Jul 19 Javascript
微信小程序表单验证错误提示效果
May 19 Javascript
基于openlayers4实现点的扩散效果
Aug 17 Javascript
VUE 动态组件的应用案例分析
Dec 02 Javascript
如何基于layui的laytpl实现数据绑定的示例代码
Apr 10 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
PHP中将网页导出为Word文档的代码
2012/05/25 PHP
php查看当前Session的ID实例
2015/03/16 PHP
PHP实现生成模糊图片的方法示例
2017/12/21 PHP
php自定义排序uasort函数示例【二维数组按指定键值排序】
2019/06/19 PHP
IE和Firefox下javascript的兼容写法小结
2008/12/10 Javascript
js对象与打印对象分析比较
2013/04/23 Javascript
基于jquery实现的文字向上跑动类似跑马灯的效果
2014/06/17 Javascript
js判断checkbox是否选中个数的方法(超简单)
2016/08/19 Javascript
angular+ionic 的app上拉加载更新数据实现方法
2017/01/16 Javascript
JS实现双击内容变为可编辑状态
2017/03/03 Javascript
浅谈JavaScript中的属性:如何遍历属性
2017/09/14 Javascript
JavaScript变量声明var,let.const及区别浅析
2018/04/23 Javascript
纯js+css实现仿移动端淘宝网站的弹出详情框功能
2019/12/29 Javascript
[59:42]Secret vs Alliacne 2019国际邀请赛小组赛 BO2 第一场 8.15
2019/08/17 DOTA
python 动态获取当前运行的类名和函数名的方法
2014/04/15 Python
在RedHat系Linux上部署Python的Celery框架的教程
2015/04/07 Python
python结合shell查询google关键词排名的实现代码
2016/02/27 Python
Python实现将sqlite数据库导出转成Excel(xls)表的方法
2017/07/17 Python
Python批量查询关键词微信指数实例方法
2019/06/27 Python
Python 使用指定的网卡发送HTTP请求的实例
2019/08/21 Python
简单瞅瞅Python vars()内置函数的实现
2019/09/27 Python
HTML5+CSS3绘制锯齿状的矩形
2016/03/01 HTML / CSS
HTML块级标签汇总(小篇)
2016/07/13 HTML / CSS
HTML5 图片悬停放大的实现代码示例
2019/12/04 HTML / CSS
Omio西班牙:全欧洲低价大巴、火车和航班搜索和比价
2017/02/11 全球购物
日本AOKI官方商城:AOKI西装
2020/06/11 全球购物
几个常见的软件测试问题
2016/09/07 面试题
网络信息管理员岗位职责
2014/01/05 职场文书
门店业绩提升方案
2014/06/08 职场文书
拆迁委托协议书
2014/09/15 职场文书
2014年办公室人员工作总结
2014/12/09 职场文书
2015年乡镇发展党员工作总结
2015/03/31 职场文书
2016年艾滋病宣传活动总结
2016/04/01 职场文书
golang通过递归遍历生成树状结构的操作
2021/04/28 Golang
python中取整数的几种方法
2021/11/07 Python
ConditionalOnProperty配置swagger不生效问题及解决
2022/06/14 Java/Android