微信小程序換膚功能實現(xiàn)代碼(思路詳解)

在手機(jī)、電腦使用頻率如此高的當(dāng)下,應(yīng)用可以更換皮膚,以提升美觀性,并減輕屏幕對眼睛的刺激,無疑對用戶體驗有很大的幫助
實現(xiàn)功能
要實現(xiàn)如上更換皮膚的效果,有幾個思路:
1.準(zhǔn)備皮膚相關(guān)的wxss,引入到app.wxss中,方便每個頁面使用;
2.設(shè)置皮膚時,動態(tài)改變wxml中元素的類名或id,使頁面應(yīng)用對應(yīng)的皮膚;
3.將選中皮膚的值保存在小程序本地緩存中,保證其他頁面及下一次打開小程序時,頁面展示正確的皮膚;
下面介紹一些實現(xiàn)的細(xì)節(jié)
wxml
<view class="page" id='{{skin}}'>
<view class="container">
...
</view>
</view>
wxml部分比較簡單,只需要動態(tài)切換id即可,注意因為page無法動態(tài)設(shè)置背景色,所以這里的最外層需要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;
}
寫好皮膚對應(yīng)的顏色樣式,直接放入app.wxss中即可,如果樣式過多,可以使用單獨的wxss文件,方便管理。
@import "style/skin/dark.wxss";
js
存儲選中的皮膚值
//wxml
//<view bindtap="setSkin" data-flag='yellow'>橘黃</view>
//bindtap事件函數(shù)
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提供給所有頁面調(diào)用,并通過已有的皮膚顏色,設(shè)置頭部和導(dǎo)航區(qū)域的背景及文字顏色。
打開一個普通wxml頁面,并設(shè)置皮膚
const app = getApp();
Page({
data: {
skin: 'normal-skin',
},
onLoad: function() {
app.setSkin(this);
},
onShow:function(){
app.setSkin(this);
}
})
在onLoad及onShow觸發(fā)時設(shè)置皮膚,這里的onShow是為了避免重新設(shè)置皮膚時,頁面還顯示上一次的皮膚,由于首次加載會設(shè)置兩次,onLoad里的app.setSkin其實可以去掉。
至此,一個精美的設(shè)置皮膚功能就實現(xiàn)了,小伙伴們快去試一試吧!
總結(jié)
到此這篇關(guān)于微信小程序換膚功能實現(xiàn)代碼(思路詳解)的文章就介紹到這了,更多相關(guān)微信小程序換膚內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
AutoJs4.4.1免費版快速接通vscode調(diào)試腳本的操作方法
這篇文章主要介紹了AutoJs4.4.1免費版快速接通vscode進(jìn)行調(diào)試腳本,首先下載AutoJs并安裝,下載完成后,將2個apk文件拷貝到手機(jī)安裝即可,接下來需要安裝插件,本文分步驟給大家介紹的非常詳細(xì),需要的朋友可以參考下2022-10-10
原生JS實現(xiàn)的多個彩色小球跟隨鼠標(biāo)移動動畫效果示例
這篇文章主要介紹了原生JS實現(xiàn)的多個彩色小球跟隨鼠標(biāo)移動動畫效果,涉及javascript事件響應(yīng)、頁面元素屬性動態(tài)修改及隨機(jī)數(shù)應(yīng)用等相關(guān)操作技巧,需要的朋友可以參考下2018-02-02
javascript將數(shù)組插入到另一個數(shù)組中的代碼
下面的代碼主要功能就是將數(shù)組arr2插入到數(shù)組arr1的index位置,需要的朋友可以參考下2013-01-01
JS數(shù)據(jù)類型(基本數(shù)據(jù)類型、引用數(shù)據(jù)類型)及堆和棧的區(qū)別分析
這篇文章主要介紹了JS數(shù)據(jù)類型(基本數(shù)據(jù)類型、引用數(shù)據(jù)類型)及堆和棧的區(qū)別,結(jié)合實例形式分析了JS基本數(shù)據(jù)類型、引用數(shù)據(jù)類型概念、用法,以及堆和棧的區(qū)別,需要的朋友可以參考下2020-03-03
JavaScript 函數(shù)參數(shù)是傳值(byVal)還是傳址(byRef) 分享
這篇文章主要介紹了在JS中函數(shù)參數(shù)是傳值(byVal)還是傳址(byRef)的誤區(qū)我們通過實例說明一下,有需要的朋友可以參考2013-07-07
thinkphp中常用的系統(tǒng)常量和系統(tǒng)變量
這篇文章主要介紹了thinkphp中常用的系統(tǒng)常量和變量,需要的朋友可以參考下2014-03-03

