vue自定義橫向滾動(dòng)條css導(dǎo)航兩行排列布局實(shí)現(xiàn)示例
vue自定義橫向滾動(dòng)條,導(dǎo)航兩行排列布局
需求說明
需求點(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è)頁效果?vue實(shí)現(xiàn)短信驗(yàn)證碼登錄
這篇文章主要為大家詳細(xì)介紹了用vue實(shí)現(xiàn)注冊(cè)頁,短信驗(yàn)證碼登錄,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2021-11-11
在Nginx上部署前端Vue項(xiàng)目的詳細(xì)步驟(超級(jí)簡(jiǎn)單!)
這篇文章主要介紹了在Nginx上部署前端Vue項(xiàng)目的詳細(xì)步驟,Nginx是一款高效的HTTP和反向代理Web服務(wù)器,作為開源軟件,Nginx以其高性能、可擴(kuò)展性和靈活性廣泛應(yīng)用于Web架構(gòu)中,文中將步驟介紹的非常詳細(xì),需要的朋友可以參考下2024-10-10
基于Vue實(shí)現(xiàn)卡片無限滾動(dòng)動(dòng)畫
這篇文章主要為大家詳細(xì)介紹了如何利用Vue制作出卡片無限滾動(dòng)動(dòng)畫,文中的示例代碼講解詳細(xì),對(duì)我們學(xué)習(xí)有一定幫助,需要的可以參考一下2022-05-05
關(guān)于vue2強(qiáng)制刷新,解決頁面不會(huì)重新渲染的問題
今天小編就為大家分享一篇關(guān)于vue2強(qiáng)制刷新,解決頁面不會(huì)重新渲染的問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2019-10-10
vue單個(gè)組件實(shí)現(xiàn)無限層級(jí)多選菜單功能
這篇文章主要介紹了vue單個(gè)組件實(shí)現(xiàn)無限層級(jí)多選菜單的相關(guān)資料,非常不錯(cuò),具有參考借鑒價(jià)值,需要的朋友可以參考下2018-04-04
vue頁面跳轉(zhuǎn)實(shí)現(xiàn)頁面緩存操作
這篇文章主要介紹了vue頁面跳轉(zhuǎn)實(shí)現(xiàn)頁面緩存操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2020-07-07
elementUI的table表格改變數(shù)據(jù)不更新問題解決
最近在做vue的項(xiàng)目時(shí)發(fā)現(xiàn)了一個(gè)問題,今天就來解決一下,本文主要介紹了elementUI的table表格改變數(shù)據(jù)不更新問題解決,感興趣的可以了解一下2022-02-02
如何在vuejs項(xiàng)目中使用md5加密密碼的實(shí)現(xiàn)
本文主要介紹了如何在vuejs項(xiàng)目中使用md5加密密碼的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2022-08-08

