基於vue與vux做的可滑動tab元件(附原始碼)

2022-03-06 16:29:21 字數 2874 閱讀 7048

背景

前不久,剛完成了乙個商品列表+購物車功能的頁面,因為一級商品分類在頂部tab中顯示,可滑動,間距可定製,如下圖所示:

定製的tab需求如下:

1. 每個tab-item的間距是相同的,可定製

2. 每乙個tab-item的寬度是隨著文字的增多而寬度增大

3. 當tab-item小於等於4個時,tab-item填滿當前螢幕,平分剩餘空間;當tab-item超過4個時,tab可滑動選擇

4. 點選tab-item時,底部橫線居中顯示,跟隨在點選的tab-item底部

成品效果如下:

這個元件基本滿足上面5點需求

難點

1)使用vux的可滑動的tab,修改元件css,如何令到每乙個tab的間距為響應式的。

2)這個元件最核心的就是底部bar的精準定位跟隨

3)從前乙個頁面點選一級分類進入商品列表頁,自動選中並在螢幕居中顯示被選中的tab-item

前期知識點

1)offsetleft:子元素相對于父元素最左上角側的橫向偏離位置

2)offsetwidth: 元素的寬度

3)scrollleft: 滑動到對應的x座標

4)定位元素style.left的運用

5)vux元件之滑動tab的運用 (需要用到元件自帶的onitemclick()方法,通過dom,可以起到點選該tab-item的作用)

難點逐一破解

1)使用vux的可滑動的tab,修改元件css,如何令到每乙個tab的間距為響應式的。

原本vux的可滑動的tab是根據scrollwidth的長度來自動計算每乙個tab-item的寬度的,因為包含這tab-item的tabbox這個div使用的是flex布局,而tab-item是它的子元素,它會自動沾滿tabbox。如果文字超出了tab-item的寬度,文字就會被隱藏。

可以通過修改vux-tab-item這個樣式來自定義樣式,把子元素的彈性屬性去除,並且設定他的padding,這樣可以呈現出文字能顯示全,並且每個tab-item間距相同的效果,css如下:

/*改變原來tabbox的flex布局*/

.tab-component .vux-tab .vux-tab-item

2)這個元件最核心之一的就是底部bar的精準定位跟隨因為上面的1)改變了布局,所以導致底部bar跟隨不準確的情況,我們可以定製bar。在vux裡面,bar是乙個div,它有滑動的動畫,我的做法是這樣的,首先通過right讓它置於tab的最左側,然後通過按鈕點選事件獲得相對應的tab-item元素的下標,然後使用for迴圈從第一tab-item開始尋找,如果不為改元素,則把它的元素寬度進行累加,直到找到該需啟用的tab-item,然後通過數學計算可把bar定位在該元素的底部並且居中,**如下:

onitemclick(keyword, index) 

barleft += document.getelementsbyclassname('vux-tab-item')[i].offsetwidth;

i += 1;

}document.getelementsbyclassname('vux-tab-ink-bar')[0].style.left = (barleft + 'px');

},

3)從前乙個頁面點選一級分類進入商品列表頁,自動選中並在螢幕居中顯示被選中的tab-item思路是這樣的:

當tab-item的數量為4個或者以下的時候,獲取當前螢幕寬度,然後評分長度,計算之後,平均分給tab-item,因為每乙個tab-item自己的樣式中有設定的padding屬性,所以間距相同,不需要額外為間距分配空間。

當tab-item的數量超過4個,則不需要分配寬度,因為是flex布局的子元素,每乙個tab-item會根據自己的文字得到自己的寬度。

最重要最核心的來了,如何讓選中的tab-item居中顯示,例如,螢幕為320px, 需要居中顯示的tab-item(簡稱sitem)距離螢幕最右側1000px,sitem本身長度為60,問現在如何讓sitem居中在長度為320px的螢幕當中?

通過下面這段**

// 偽**

this.$refs.tabboxouter.scrollleft = sitem.offsetleft

可以把上面這種狀態變為下圖:

通過下面這段**,就可以把上圖的兩黑點中心在垂直方向上重合,並且滾動顯示在螢幕上面
this.$refs.tabboxouter.scrollleft = sitem.offsetleft - tabconter
完整**(只要配置了vux環境,就能直接執行此元件)

tab元件

}

go to 2

go to 3

go to 4

go to 5

go to 6

go to 7

vux 選擇器 vue專案中vux的使用

vux 在vue cli中使用步驟如下 1 安裝 npm i vux s 2 vux2必須配合vux loader使用,並配置build webpack.base.conf.js npm i vux loader d const vuxloader require vux loader const ...

vux 選擇器 vue專案中vux的使用

vux 在vue cli中使用步驟如下 1 安裝 npm i vux s 2 vux2必須配合vux loader使用,並配置build webpack.base.conf.js npm i vux loader d const vuxloader require vux loader const ...

Vue可復用的過渡

過渡可以通過 vue 的元件系統實現復用。要建立乙個可復用過渡元件,你需要做的就是將或者作為根元件,然後將任何子元件放置在其中就可以了。使用template的簡單例子 vue.component my special transition afterenter function el 函式式元件更適...