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


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 相关文章推荐
JQuery Dialog(JS 模态窗口,可拖拽的DIV)
Feb 07 Javascript
Javascript Function对象扩展之延时执行函数
Jul 06 Javascript
javascript Array.prototype.slice使用说明
Oct 11 Javascript
JavaScript使表单中的内容显示在屏幕上的方法
Jun 29 Javascript
readonly和disabled属性的区别
Jul 26 Javascript
js精美的幻灯片画集特效代码分享
Aug 29 Javascript
JavaScript的instanceof运算符学习教程
Jun 08 Javascript
AngularJS指令用法详解
Nov 02 Javascript
浅谈关于JS下大批量异步任务按顺序执行解决方案一点思考
Jan 08 Javascript
解决vue v-for src 图片路径问题 404
Nov 12 Javascript
js实现ajax的用户简单登入功能
Jun 18 Javascript
浅谈vue 二级路由嵌套和二级路由高亮问题
Aug 06 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开发中常用的字符串操作函数
2011/02/08 PHP
php实现的漂亮分页方法
2014/04/17 PHP
个人写的PHP验证码生成类分享
2014/08/21 PHP
php生成数字字母的验证码图片
2015/07/14 PHP
PHP PDOStatement::fetchObject讲解
2019/02/01 PHP
button没写type=button会导致点击时提交
2014/03/06 Javascript
通过Javascript读取本地Excel文件内容的代码示例
2014/04/08 Javascript
javascript判断css3动画结束 css3动画结束的回调函数
2015/03/10 Javascript
通过设置CSS中的position属性来固定层的位置
2015/12/14 Javascript
jQuery验证插件validate使用详解
2016/05/11 Javascript
AngularJS 基础ng-class-even指令用法
2016/08/01 Javascript
深入理解AngularJS中的ng-bind-html指令和$sce服务
2016/09/08 Javascript
基于angular中的重要指令详解($eval,$parse和$compile)
2016/10/21 Javascript
Vue的Flux框架之Vuex状态管理器
2017/07/30 Javascript
bootstrap响应式工具使用详解
2017/11/29 Javascript
基于vue-ssr的静态网站生成器VuePress 初体验
2018/04/17 Javascript
JS常见DOM节点操作示例【创建 ,插入,删除,复制,查找】
2018/05/14 Javascript
详解element-ui日期时间选择器的日期格式化问题
2019/04/08 Javascript
js实现旋转的星空效果
2019/11/01 Javascript
JS中队列和双端队列实现及应用详解
2020/09/29 Javascript
python实现带验证码网站的自动登陆实现代码
2015/01/12 Python
使用numba对Python运算加速的方法
2018/10/15 Python
使用Python的toolz库开始函数式编程的方法
2018/11/15 Python
Python文件如何引入?详解引入Python文件步骤
2018/12/10 Python
Python递归函数特点及原理解析
2020/03/04 Python
Python中SQLite如何使用
2020/05/27 Python
美国奢侈品在线团购网站:Gilt City
2017/11/16 全球购物
作为网站管理者应当如何防范XSS
2014/08/16 面试题
档案接收函
2014/01/13 职场文书
向领导表决心的话
2014/03/11 职场文书
生日宴会策划方案
2014/06/03 职场文书
优秀纪检干部材料
2014/08/27 职场文书
2016年小学教师师德承诺书
2016/03/25 职场文书
MySQL Shell import_table数据导入的实现
2021/08/07 MySQL
python套接字socket通信
2022/04/01 Python
Golang 切片(Slice)实现增删改查
2022/04/22 Golang