微信小程式換膚功能實現程式碼(思路詳解)
阿新 • • 發佈:2020-08-27
在手機、電腦使用頻率如此高的當下,應用可以更換面板,以提升美觀性,並減輕螢幕對眼睛的刺激,無疑對使用者體驗有很大的幫助
實現功能
要實現如上更換面板的效果,有幾個思路:
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,}) } } }) } })
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其實可以去掉。
至此,一個精美的設定面板功能就實現了,小夥伴們快去試一試吧!
總結
到此這篇關於微信小程式換膚功能實現程式碼(思路詳解)的文章就介紹到這了,更多相關微信小程式換膚內容請搜尋我們以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援我們!