Vue.js+cube-ui(Scroll組件)實(shí)現(xiàn)類似頭條效果的橫向滾動導(dǎo)航條
本博主在一次個(gè)人移動端項(xiàng)目中,遇到這么一個(gè)需求:希望自己的項(xiàng)目中,頭部導(dǎo)航條的效果可以像今日頭條那樣,橫向滾動!
對于這樣的效果,在各大移動端項(xiàng)目中幾乎是隨處可見,為什么呢?
我們都知道,對于移動端也就是手機(jī)上,我們頁面的寬度并不像PC端那樣大,可以顯示很長的導(dǎo)航項(xiàng),但對于我們移動端來說,由于功能的拓展,或者業(yè)務(wù)的細(xì)分,往往導(dǎo)航項(xiàng)也會隨之增多,一旦超過移動端在一行的頁面顯示寬度,那便會出現(xiàn)導(dǎo)航項(xiàng)換行的現(xiàn)象,雖說也有這樣布局,但一旦導(dǎo)航項(xiàng)增多到一定程度的時(shí)候,我們的頁面(首頁)將均被導(dǎo)航項(xiàng)霸占,這樣不僅影響重點(diǎn)內(nèi)容的展示同時(shí)對用戶的體驗(yàn)度也有很大程度的影響!所以,為了解決這相關(guān)問題,出現(xiàn)了橫向滾動條,主要有幾點(diǎn)好處:
•毫無疑問的一點(diǎn),用戶體驗(yàn)好:用戶可以根據(jù)自己的需要,滑動導(dǎo)航的方式選擇自己的方式
•便于管理與維護(hù)
•使得頁面變得更為美觀
•突出主體業(yè)務(wù)
那么這么一個(gè)用戶體驗(yàn)好,然后又實(shí)用的效果是怎么實(shí)現(xiàn)的呢?
為了堅(jiān)持“不重復(fù)造輪子,在理解研究輪子的基礎(chǔ)上進(jìn)行改革創(chuàng)新”的原則,我選擇了滴滴團(tuán)隊(duì)的開源框架 —— cube-ui
cube-ui 框架的官方文檔地址:https://didi.github.io/cube-ui/#/zh-CN/docs/introduction
在開始實(shí)現(xiàn)之前,本博主也是踩了不少坑啊,吐槽就不說了,說多了都是淚??!下面進(jìn)入主題:
cube-ui 所提供的組件中,有個(gè) Scroll 的組件,是一個(gè)基于better-scroll進(jìn)行封裝的組件.其實(shí)現(xiàn)原理我就不過多贅述了,去看了文檔或者平時(shí)弄過相關(guān)效果的大家都知道.
大概的一個(gè) HTML 結(jié)構(gòu)就是:一個(gè)大的盒子套了兩個(gè)小盒子,一個(gè)是滾動導(dǎo)航,另一個(gè)是額外拓展(對本效果不影響,可以忽略)
<div class="nav-scroll-list-wrap"> <cube-scroll ref="navScroll" direction="horizontal"> <ul class="nav-wrapper"> <li v-for="(item, index) in labels" :key="index" class="nav-item">{{ item }}</li> </ul> </cube-scroll> <div class="search-icon"> <span class="iconfont icon"></span> </div> </div>
這里說下 labels 是我傳入的導(dǎo)航項(xiàng)數(shù)據(jù),是一個(gè)本地 mock 數(shù)據(jù),共八項(xiàng)
樣式部分:這里是實(shí)現(xiàn)的重點(diǎn)!因?yàn)閷τ?Scroll 組件,內(nèi)容元素.cube-scroll-content在滾動方向上的長度必須大于容器元素,分為縱向滾動和橫向滾動,這里實(shí)現(xiàn)的是橫向滾動,縱向的原理也是大同小異,取決于滾動的方向采取不同的樣式.
.nav-scroll-list-wrap position relative padding-right 120px
大盒子部分的樣式對于該需求幾乎無影響,這里主要是想說下,設(shè)置為相對定位,是為了子元素的定位,子絕父相,而內(nèi)邊距是為了騰出一部分位置給采用絕對定位的子元素(搜索圖標(biāo)),同時(shí)這也是一個(gè)布局技巧和滾動的關(guān)鍵,為什么這么說呢?
首先,布局技巧:可以騰出一部分位置給拓展功能項(xiàng)用,其次可以解決拓展功能項(xiàng)因?yàn)樵黾?z-index 而將滾動的最后一個(gè)導(dǎo)航項(xiàng)遮擋住的問題;
滾動的關(guān)鍵:假如沒有這個(gè)內(nèi)邊距,那么我八個(gè)導(dǎo)航項(xiàng)根據(jù)其占據(jù)的寬度將不能大于容器元素,從而出現(xiàn)無法滾動的現(xiàn)象,而這個(gè)內(nèi)邊距的出現(xiàn)正好是可以減小容器元素的寬度,那么只要導(dǎo)航項(xiàng)足夠且不少的情況下是可以實(shí)現(xiàn)內(nèi)容元素在滾動方向上的長度大于容器元素的,但如果在項(xiàng)目初期,導(dǎo)航項(xiàng)過少,只有四五個(gè)的情況下不建議使用這個(gè)方法,這種情況一般都是采取傳統(tǒng)的解決方法:在傳入數(shù)組導(dǎo)航的長度基礎(chǔ)上乘以一個(gè)數(shù)值來動態(tài)增加內(nèi)容元素的寬度,具體做法:
<cube-scroll ref="navScroll" direction="horizontal"> <ul class="nav-wrapper" :style="{width:navWidth+'px'}"> <li v-for="(item, index) in navTxts" :key="index" class="nav-item">{{ item }}</li> </ul> </cube-scroll> methods: { widthComputed() { this.navWidth=this.navTxts.length*520 } }, created() { this.widthComputed() }
其余樣式:基本在官方的文檔中均有說明,我改動了部分,具體的我就不過多贅述了
.cube-scroll-content display inline-block .nav-wrapper display inline-block white-space nowrap line-height 80px .nav-item display: inline-block padding: 0 30px font-size 40px
總結(jié)
以上所述是小編給大家介紹的Vue.js+cube-ui(Scroll組件)實(shí)現(xiàn)類似頭條效果的橫向滾動導(dǎo)航條,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時(shí)回復(fù)大家的。在此也非常感謝大家對腳本之家網(wǎng)站的支持!
如果你覺得本文對你有幫助,歡迎轉(zhuǎn)載,煩請注明出處,謝謝!
- Vue實(shí)現(xiàn)跑馬燈樣式文字橫向滾動
- Vue中利用better-scroll組件實(shí)現(xiàn)橫向滾動功能
- vue使用better-scroll實(shí)現(xiàn)橫向滾動的方法實(shí)例
- Vue替代marquee標(biāo)簽超出寬度文字橫向滾動效果
- Vue中消息橫向滾動時(shí)setInterval清不掉的問題及解決方法
- vue實(shí)現(xiàn)公告欄文字上下滾動效果的示例代碼
- vue監(jiān)聽滾動事件實(shí)現(xiàn)滾動監(jiān)聽
- Vue.js實(shí)戰(zhàn)之通過監(jiān)聽滾動事件實(shí)現(xiàn)動態(tài)錨點(diǎn)
- vue實(shí)現(xiàn)消息的無縫滾動效果的示例代碼
- vue實(shí)現(xiàn)橫屏滾動公告效果
相關(guān)文章
離線搭建vue環(huán)境運(yùn)行項(xiàng)目詳細(xì)步驟
由于公司要求在內(nèi)網(wǎng)開發(fā)項(xiàng)目,而內(nèi)網(wǎng)不能連接外網(wǎng),因此只能離線安裝vue環(huán)境,下面這篇文章主要給大家介紹了關(guān)于離線搭建vue環(huán)境運(yùn)行項(xiàng)目的詳細(xì)步驟,需要的朋友可以參考下2023-11-11一篇文章,教你學(xué)會Vue CLI 插件開發(fā)
這篇文章主要介紹了Vue CLI插件開發(fā),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2019-04-04用Vue.js在瀏覽器中實(shí)現(xiàn)裁剪圖像功能
在本教程中,我們將探討如何在瀏覽器中使用 JavaScript 庫來操作圖片,為服務(wù)器上的存儲做準(zhǔn)備,并在 Web 程序中使用。我們將使用 Vue.js 而不是原生 JavaScript來完成此操作,需要的朋友可以參考下2019-06-06vue 關(guān)閉瀏覽器窗口的時(shí)候,清空localStorage的數(shù)據(jù)示例
今天小編就為大家分享一篇vue 關(guān)閉瀏覽器窗口的時(shí)候,清空localStorage的數(shù)據(jù)示例,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧2019-11-11el-form-item?prop屬性動態(tài)綁定不生效問題及解決
這篇文章主要介紹了el-form-item?prop屬性動態(tài)綁定不生效問題及解決方案,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2022-07-07Vue實(shí)現(xiàn)docx/xlsx/pdf等類型文件預(yù)覽功能
這篇文章主要為大家詳細(xì)介紹了如何溧陽Vue實(shí)現(xiàn)docx/xlsx/pdf等類型文件預(yù)覽功能,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下2023-02-02