vue自定義橫向滾動(dòng)條css導(dǎo)航兩行排列布局實(shí)現(xiàn)示例
vue自定義橫向滾動(dòng)條,導(dǎo)航兩行排列布局
需求說(shuō)明
需求點(diǎn)主要有兩個(gè)
- 接口返回的導(dǎo)航數(shù)組,要從上到下,從左到右排列,導(dǎo)航的個(gè)數(shù)是可配置的。
- 滾動(dòng)條的長(zhǎng)度跟滾動(dòng)容器長(zhǎng)度不一樣,需要自己手動(dòng)模擬滾動(dòng)條。
效果
代碼實(shí)現(xiàn)
html:
<div class="home-nav-container"> <ul class="home-nav nav-container" :style="floorStyle" @scroll="getLeft" > <li v-for="(item, index) in floors" :key="index" > <img class="nav-icon" :src="item.headImg" alt="" /> </li> </ul> <div v-if="slideShow" class="slide"> <div class="slide-bar"> <div class="slide-show" :style="`width:${slideWidth}px;margin-left:${slideLeft<=1 ? 0 : slideLeft}px`"></div> </div> </div> </div>
js:
export default { data() { return { slideWidth: 0, // 滑塊寬 slideLeft: 0, // 滑塊位置 slideShow: false, // 是否顯示滑塊 slideRatio: 0, // 滑塊比例 lengthRatio: 0, // 列表長(zhǎng)度與屏幕長(zhǎng)度比例(每個(gè)Item占20%屏幕長(zhǎng)度) }; }, created() { this.getRatio(); }, mounted() { window.addEventListener('scroll', this.getLeft); }, methods: { getRatio() { if (this.floor.rooms.length <= 10) { this.slideShow = false; } else { this.lengthRatio = Math.floor(this.floor.rooms.length / 2) / 5; // 列表長(zhǎng)度與屏幕長(zhǎng)度比例(每個(gè)Item占20%屏幕長(zhǎng)度) this.slideRatio = 40 / (375 * this.lengthRatio); // 滾動(dòng)列表長(zhǎng)度與滑條長(zhǎng)度比例 this.slideWidth = 40 / this.lengthRatio; // 當(dāng)前顯示藍(lán)色滑條的長(zhǎng)度(保留兩位小數(shù)) this.slideShow = true; } }, // slideLeft動(dòng)態(tài)變化 getLeft(e) { this.slideLeft = e.target.scrollLeft * this.slideRatio; }, }, };
css:
.home-nav-container { background-color: #fff; position: relative; background-size: 100% 100%; margin: 0.05rem 0.24rem; border-radius: 0.2rem; .home-nav { display: flex; flex-wrap: wrap; &.nav-container { display: flex; flex-wrap: wrap; flex-direction: column; max-height: 3.48rem; overflow-x: scroll; overflow-y: hidden; position: relative; &::-webkit-scrollbar { display: none; } } li { width: 20%; text-align: center; box-sizing: border-box; } } .slide{ height: .08rem; background:#fff; width:100%; padding: 0.04rem 0 0.08rem 0; } .slide .slide-bar{ width: 40px; bottom: 2px; margin: 0 auto; height: .08rem; background:#f0f0f0; border-radius: .08rem; } .slide .slide-bar .slide-show{ height:100%; border-radius: .08rem; background-color: #d2d2d2; } }
以上就是vue自定義橫向滾動(dòng)條css導(dǎo)航兩行排列布局的詳細(xì)內(nèi)容,更多關(guān)于vue橫向滾動(dòng)條css導(dǎo)航布局的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
用vue實(shí)現(xiàn)注冊(cè)頁(yè)效果?vue實(shí)現(xiàn)短信驗(yàn)證碼登錄
這篇文章主要為大家詳細(xì)介紹了用vue實(shí)現(xiàn)注冊(cè)頁(yè),短信驗(yàn)證碼登錄,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2021-11-11在Nginx上部署前端Vue項(xiàng)目的詳細(xì)步驟(超級(jí)簡(jiǎn)單!)
這篇文章主要介紹了在Nginx上部署前端Vue項(xiàng)目的詳細(xì)步驟,Nginx是一款高效的HTTP和反向代理Web服務(wù)器,作為開(kāi)源軟件,Nginx以其高性能、可擴(kuò)展性和靈活性廣泛應(yīng)用于Web架構(gòu)中,文中將步驟介紹的非常詳細(xì),需要的朋友可以參考下2024-10-10基于Vue實(shí)現(xiàn)卡片無(wú)限滾動(dòng)動(dòng)畫(huà)
這篇文章主要為大家詳細(xì)介紹了如何利用Vue制作出卡片無(wú)限滾動(dòng)動(dòng)畫(huà),文中的示例代碼講解詳細(xì),對(duì)我們學(xué)習(xí)有一定幫助,需要的可以參考一下2022-05-05關(guān)于vue2強(qiáng)制刷新,解決頁(yè)面不會(huì)重新渲染的問(wèn)題
今天小編就為大家分享一篇關(guān)于vue2強(qiáng)制刷新,解決頁(yè)面不會(huì)重新渲染的問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2019-10-10vue單個(gè)組件實(shí)現(xiàn)無(wú)限層級(jí)多選菜單功能
這篇文章主要介紹了vue單個(gè)組件實(shí)現(xiàn)無(wú)限層級(jí)多選菜單的相關(guān)資料,非常不錯(cuò),具有參考借鑒價(jià)值,需要的朋友可以參考下2018-04-04vue頁(yè)面跳轉(zhuǎn)實(shí)現(xiàn)頁(yè)面緩存操作
這篇文章主要介紹了vue頁(yè)面跳轉(zhuǎn)實(shí)現(xiàn)頁(yè)面緩存操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2020-07-07elementUI的table表格改變數(shù)據(jù)不更新問(wèn)題解決
最近在做vue的項(xiàng)目時(shí)發(fā)現(xiàn)了一個(gè)問(wèn)題,今天就來(lái)解決一下,本文主要介紹了elementUI的table表格改變數(shù)據(jù)不更新問(wèn)題解決,感興趣的可以了解一下2022-02-02如何在vuejs項(xiàng)目中使用md5加密密碼的實(shí)現(xiàn)
本文主要介紹了如何在vuejs項(xiàng)目中使用md5加密密碼的實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2022-08-08