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


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 相关文章推荐
js函数使用技巧之 setTimeout(function(){},0)
Feb 09 Javascript
jquery 多级下拉菜单核心代码
May 21 Javascript
jquery随意添加移除html的实现代码
Jun 21 Javascript
基于jquery实现漂亮的动态信息提示效果
Aug 02 Javascript
jQuery下通过replace字符串替换实现大小图片切换
May 22 Javascript
jquery常用特效方法使用示例
Apr 25 Javascript
JavaScript中this关键词的使用技巧、工作原理以及注意事项
May 20 Javascript
JavaScript易错知识点整理
Dec 05 Javascript
解析利用javascript如何判断一个数为素数
Dec 08 Javascript
javascript数组定义的几种方法
Oct 06 Javascript
vue使用监听实现全选反选功能
Jul 06 Javascript
解决Layui数据表格的宽高问题
Sep 28 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
完美解决dedecms中的[html][/html]和[code][/code]问题
2007/03/20 PHP
PHP 如何获取二维数组中某个key的集合
2014/06/03 PHP
Laravel实现搜索的时候分页并携带参数
2019/10/15 PHP
Javascript 兼容firefox的一些问题
2009/05/21 Javascript
[原创]IE view-source 无法查看看源码 JavaScript看网页源码
2009/07/19 Javascript
IE bug table元素的innerHTML
2010/01/11 Javascript
使用jquery为table动态添加行的实现代码
2011/03/30 Javascript
node.js解决获取图片真实文件类型的问题
2014/12/20 Javascript
TypeScript 中接口详解
2015/06/19 Javascript
Bootstrap嵌入jqGrid,使你的table牛逼起来
2016/05/05 Javascript
JavaScript检测原始值、引用值、属性
2016/06/20 Javascript
关于bootstrap日期转化,bootstrap-editable的简单使用,bootstrap-fileinput的使用详解
2017/05/12 Javascript
实现图片首尾平滑轮播(JS原生方法—节流)
2017/10/17 Javascript
Angular4.0动画操作实例详解
2019/05/10 Javascript
浅谈一种让小程序支持JSX语法的新思路
2019/06/16 Javascript
layui问题之模拟table表格中的选中按钮选中事件的方法
2019/09/20 Javascript
vue 自定义组件的写法与用法详解
2020/03/04 Javascript
在vue中封装方法以及多处引用该方法详解
2020/08/14 Javascript
vue watch监控对象的简单方法示例
2021/01/07 Vue.js
Python之PyUnit单元测试实例
2014/10/11 Python
Python的__builtin__模块中的一些要点知识
2015/05/02 Python
pycharm重置设置,恢复默认设置的方法
2018/10/22 Python
python 多线程中子线程和主线程相互通信方法
2018/11/09 Python
用Python画一个LinkinPark的logo代码实例
2019/09/10 Python
python爬虫开发之PyQuery模块详细使用方法与实例全解
2020/03/09 Python
Scrapy中如何向Spider传入参数的方法实现
2020/09/28 Python
详解CSS3中强大的filter(滤镜)属性
2017/06/29 HTML / CSS
canvas仿写贝塞尔曲线的示例代码
2017/12/29 HTML / CSS
Stuart Weitzman欧盟:美国奢华鞋履品牌
2017/05/24 全球购物
美国运动鞋类和服装零售连锁店:Shoe Palace
2019/08/13 全球购物
班主任工作年限证明
2014/01/12 职场文书
金融事务专业毕业生求职信
2014/02/23 职场文书
2014年大学生社会实践自我鉴定
2014/09/26 职场文书
大明湖导游词
2015/02/03 职场文书
小学运动会报道稿
2015/07/22 职场文书
MySQL派生表联表查询实战过程
2022/03/20 MySQL