微信小程序开发:实现换肤功能

2019-01-1121:51:52APP与小程序开发Comments2,530 views字数 2336阅读模式

演示

扫码即可体验,或搜索“我的年目标”文章源自菜鸟学院-https://www.cainiaoxueyuan.com/xcx/9307.html

微信小程序开发:实现换肤功能

下面为更换皮肤效果图文章源自菜鸟学院-https://www.cainiaoxueyuan.com/xcx/9307.html

微信小程序开发:实现换肤功能

实现功能

要实现如上更换皮肤的效果,有几个思路:文章源自菜鸟学院-https://www.cainiaoxueyuan.com/xcx/9307.html

  1. 准备皮肤相关的wxss,引入到app.wxss中,方便每个页面使用;
  2. 设置皮肤时,动态改变wxml中元素的类名或id,使页面应用对应的皮肤;
  3. 将选中皮肤的值保存在小程序本地缓存中,保证其他页面及下一次打开小程序时,页面展示正确的皮肤;

下面介绍一些实现的细节文章源自菜鸟学院-https://www.cainiaoxueyuan.com/xcx/9307.html

wxml
<view class="page" id='{{skin}}'>  
  <view class="container">
  	...
  </view>
</view>
复制代码

wxml部分比较简单,只需要动态切换id即可,注意因为page无法动态设置背景色,所以这里的最外层需要width: 100%;height: 100%;,否则将无法使皮肤铺满页面。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/xcx/9307.html

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文件,方便管理。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/xcx/9307.html

@import "style/skin/dark.wxss";
复制代码
js

存储选中的皮肤值文章源自菜鸟学院-https://www.cainiaoxueyuan.com/xcx/9307.html

//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上的公共方法,下面会有介绍文章源自菜鸟学院-https://www.cainiaoxueyuan.com/xcx/9307.html

//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提供给所有页面调用,并通过已有的皮肤颜色,设置头部和导航区域的背景及文字颜色。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/xcx/9307.html

打开一个普通wxml页面,并设置皮肤文章源自菜鸟学院-https://www.cainiaoxueyuan.com/xcx/9307.html

const app = getApp();

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

复制代码

在onLoad及onShow触发时设置皮肤,这里的onShow是为了避免重新设置皮肤时,页面还显示上一次的皮肤,由于首次加载会设置两次,onLoad里的app.setSkin其实可以去掉。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/xcx/9307.html

至此,一个精美的设置皮肤功能就实现了,小伙伴们快去试一试吧!文章源自菜鸟学院-https://www.cainiaoxueyuan.com/xcx/9307.html

作者:雾空
链接:https://juejin.im/post/5c37563d6fb9a049ea392771
来源:掘金
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/xcx/9307.html

文章源自菜鸟学院-https://www.cainiaoxueyuan.com/xcx/9307.html
  • 本站内容整理自互联网,仅提供信息存储空间服务,以方便学习之用。如对文章、图片、字体等版权有疑问,请在下方留言,管理员看到后,将第一时间进行处理。
  • 转载请务必保留本文链接:https://www.cainiaoxueyuan.com/xcx/9307.html

Comment

匿名网友 填写信息

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定