国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > JavaScript > 正文

使用vue + less 實現簡單換膚功能的示例

2019-11-19 14:20:47
字體:
來源:轉載
供稿:網友

做的換膚效果比較簡單,只是頂部導航背景色的改變。下面是效果圖。

 

首先,先說一下我最初的思路。

我最初的想法是使用less定義變量,然后通過js來切換變量,通過切換的變量來達到換膚的效果。

我先新建了一個 theme.less文件,代碼如下:

 @theme:@themea; @themea:pink; @themeb:blue; @themec:gray;

如我最開始的想法,應該是通過點擊事件來改變變量 @theme 的值。

我用了element-ui這個框架,所以我的下拉菜單的代碼也不復雜:

<el-dropdown class="colorBtn " trigger="click" @command="changeColor"> <span class="el-dropdown-link " >換膚</span> <el-dropdown-menu slot="dropdown"> <el-dropdown-item command="a" @click="change_type(a)">夢幻粉</el-dropdown-item> <el-dropdown-item command="b" @click="change_type(b)">天空藍</el-dropdown-item> <el-dropdown-item command="c" @click="change_type(c)">霧霾灰</el-dropdown-item> </el-dropdown-menu></el-dropdown>

點擊事件的回調事件綁定在command事件,我定義了一個changeColor的方法

  changeColor(command){  console.log(command);//能獲取到當前點擊的元素的command }

于是,問題來了,我怎么通過點擊事件來改變@theme的值呢?我陷入了沉(搜)思(索)……

終于找到了一個迂回解決問題的方法,其實一開始的想法也沒有問題,但是需要再包裝一層。怎么包裝呢?我們雖然暫時控制不了變量值,但是我們可以控制元素的類名。

我們可以將換膚的部分抽出來用less函數來表示,將theme.less代碼改成下面代碼

其中 @backcolor是背景色,@fcolor是字體顏色

.theme(@backcolor:#EEA2AD,@fcolor:#fff) { .header { color: @fcolor; background: @backcolor; width: 100%; height: 2rem; position: relative; h4 {  width: 100%;  text-align: center;  line-height: 2rem;  font-size: 1rem; } .go-back {  width: 2rem;  height: 2rem;  text-align: center;  color: #fff;  font-size: 0.8rem;  float: left;  line-height: 2rem;  margin-left: 1rem;  position: absolute;  left: 0;  top: 0; } .header-cont {  width: 100%;  text-align: center;  line-height: 2rem;  font-size: 1rem;  color: #fff; } .colorBtn {  width: 2rem;  height: 2rem;  text-align: center;  color: #fff;  font-size: 0.8rem;  line-height: 2rem;  margin-right: 1rem;  position: absolute;  top: 0;  right: 0; } }}

新建一個color.less,設置幾種不同的皮膚樣式。這里不同的皮膚樣式,我用themea,themeb,themec….來表示,對應組件中的command值。當我點擊粉色的時候,調用相應的函數給元素添加相對應的類名。不要忘記引用 theme.less

 @import url('./theme.less');  .themea{   .theme();//默認的樣式  }  .themeb{   .theme(blue,#fff);  }  .themec{   .theme(#111,#999);  }

當點擊換膚的下拉菜單時,調用的changeColor方法需要給元素添加不同的類名,當然color.less文件記得引用。

 changeColor(command){  console.log(command);  document.getElementById('app').className ='theme'+command ; }

在這一塊的時候,剛開始我也遇到一個問題,就是我剛開始只將這個頁面的樣式單獨抽了出來,所以其他組件的頭部樣式并沒有改變。我的第一個想法竟然是使用cookie,額,后來想著既然是單頁面,那我將樣式綁定在比較頂層的元素上,是不是可以?

結果,顯而易見!!!

如果要記住上一次換的皮膚,我使用的是localStorage,將每次點擊換膚的主題記錄下來,然后再頁面渲染之前判斷是否有這個主題就可以了。效果如下

 

以上這篇使用vue + less 實現簡單換膚功能的示例就是小編分享給大家的全部內容了,希望能給大家一個參考,也希望大家多多支持武林網。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 改则县| 江山市| 英吉沙县| 武功县| 呼图壁县| 东至县| 海宁市| 阜宁县| 驻马店市| 甘肃省| 安西县| 沭阳县| 垫江县| 台中市| 阳原县| 阳东县| 灵璧县| 惠来县| 大同县| 泾源县| 涿州市| 卓尼县| 汉寿县| 任丘市| 永德县| 上林县| 西和县| 北票市| 凤凰县| 呈贡县| 财经| 密云县| 安庆市| 新蔡县| 桂林市| 沈阳市| 施甸县| 康保县| 陵川县| 岱山县| 抚顺市|