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


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进行拖拽
Jul 20 Javascript
jQuery(非HTML5)可编辑表格实现代码
Dec 11 Javascript
Javascript模块化编程(三)require.js的用法及功能介绍
Jan 17 Javascript
node.js中的buffer.toString方法使用说明
Dec 14 Javascript
js实现带按钮的上下滚动效果
May 12 Javascript
JavaScript中Function()函数的使用教程
Jun 04 Javascript
总结在前端排序中遇到的问题
Jul 19 Javascript
基于JavaScript实现自定义滚动条
Jan 25 Javascript
js学习心得_一个简单的动画库封装tween.js
Jul 14 Javascript
js运算符的一些特殊用法
Jul 29 Javascript
layui 数据表格复选框实现单选功能的例子
Sep 19 Javascript
解决VUE 在IE下出现ReferenceError: Promise未定义的问题
Nov 07 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将DateTime对象转化为友好时间显示的实现代码
2011/09/20 PHP
php准确获取文件MIME类型的方法
2015/06/17 PHP
PHP单例模式详细介绍
2015/07/01 PHP
Yii2中简单的场景使用介绍
2017/06/02 PHP
JQUBAR1.1 jQuery 柱状图插件发布
2010/11/28 Javascript
JS控件的生命周期介绍
2012/10/22 Javascript
javascript中日期函数new Date()的浏览器兼容性问题
2015/09/05 Javascript
jQuery+css实现的切换图片功能代码
2016/01/27 Javascript
jQuery Easyui学习教程之实现datagrid在没有数据时显示相关提示内容
2016/07/09 Javascript
详谈JS中实现种子随机数及作用
2016/07/19 Javascript
基于javascript实现的快速排序
2016/12/02 Javascript
详解网站中图片日常使用以及优化手法
2017/01/09 Javascript
浅谈node中的exports与module.exports的关系
2017/08/01 Javascript
Koa2 之文件上传下载的示例代码
2018/03/29 Javascript
微信小程序实现页面分享onShareAppMessage
2019/08/12 Javascript
vue 实现路由跳转时更改页面title
2019/11/05 Javascript
详解Vue 单文件组件的三种写法
2020/02/19 Javascript
echarts柱状图背景重叠组合而非并列的实现代码
2020/12/10 Javascript
详解如何在vue+element-ui的项目中封装dialog组件
2020/12/11 Vue.js
Python实现的单向循环链表功能示例
2017/11/10 Python
使用python编写简单的小程序编译成exe跑在win10上
2018/01/15 Python
Python3.5.3下配置opencv3.2.0的操作方法
2018/04/02 Python
python的pytest框架之命令行参数详解(上)
2019/06/27 Python
详解Python Qt的窗体开发的基本操作
2019/07/14 Python
python正则-re的用法详解
2019/07/28 Python
Python 过滤错误log并导出的实例
2019/12/26 Python
python 密码学示例——凯撒密码的实现
2020/09/21 Python
Rakuten Kobo台湾:电子书、eReaders和Reading应用程式
2017/11/24 全球购物
单位单身证明范本
2014/01/11 职场文书
迟到检讨书1000字
2014/01/15 职场文书
班级入场式解说词
2014/02/01 职场文书
技术总监管理岗位职责
2014/03/09 职场文书
安全生产责任书
2014/03/12 职场文书
辩论赛主持词
2014/03/18 职场文书
分析Python感知线程状态的解决方案之Event与信号量
2021/06/16 Python
Ubuntu Server 安装Tomcat并配置systemctl
2022/04/28 Servers