vue實(shí)現(xiàn)頂部左右滑動導(dǎo)航
日常開發(fā)中經(jīng)常用到導(dǎo)航這些東西,寫篇文章記錄下。該導(dǎo)航實(shí)現(xiàn)為點(diǎn)擊末尾/起首位置,導(dǎo)航自動滑動出下一項(xiàng)的效果。
思路:判斷當(dāng)前點(diǎn)擊項(xiàng),相對與屏幕的位置,若點(diǎn)擊的位置,滿足可移動的限制,進(jìn)行自動滑動處理。
實(shí)現(xiàn)如下:
vue
<template> <div class="debug-index-page"> <div class="tab-layout" id="scroller"> <ul v-for="(tab, idx) in tabList" :key="idx"> <li :id="`tab-${tab.id}`" class="tab-item" @click="onClickTab(tab)" :style="`background:${tab.select ? 'red' : 'none'}`" > {{ tab.text }} </li> </ul> </div> </div> </template>
JS
export default { data() { return { tabList: [], } }, created() { let list = [ "我的貴族", "貴族1", "我的貴族2", "貴族3", "貴族4", "貴族5", "我的貴族6", "我的貴族7", ]; list.forEach((text, idx) => { this.tabList.push({ text, id: idx, // tab標(biāo)識 select: idx == 0, // 是否被選擇 index: idx // 處于顯示的位置 }); }); }, computed: { curTab() { return this.tabList.find(v => v.select); } }, methods: { onClickTab(tabInfo) { let curTab = this.curTab; if (curTab.id == tabInfo.id) return; let { index, id } = tabInfo; // 滑動控件 let scroller = document.getElementById("scroller"); let speed = scroller.scrollWidth / this.tabList.length; let tab = document.getElementById(`tab-${id}`); let bWidth = document.body.clientWidth; // 點(diǎn)擊右邊 if (curTab.index < index && tab.clientWidth * index >= bWidth - speed) { // 滑動的距離 scroller.scrollLeft = (index + 2) * speed - bWidth; } else if (curTab.index > index && (tab.clientWidth * index - (scroller.scrollLeft + bWidth) < speed)) { // 滑動的距離 scroller.scrollLeft = (index - 1) * speed; } curTab.select = false; this.tabList[index].select = true; } } }
less
.debug-index-page { width: 100%; overflow:hidden; .tab-layout { width: 100%; overflow-x: scroll; display: flex; .tab-item { width: 1rem; text-align: center; } } }
以上就是導(dǎo)航的顯示了。
以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
vue2.0開發(fā)實(shí)踐總結(jié)之疑難篇
這篇文章主要為大家總結(jié)了vue2.0開發(fā)實(shí)踐的疑難,具有一定的參考價值,感興趣的小伙伴們可以參考一下2016-12-12在Vue中使用axios請求攔截的實(shí)現(xiàn)方法
這篇文章主要介紹了在Vue中使用axios請求攔截,需要的朋友可以參考下2018-10-10如何使用yarn創(chuàng)建vite+vue3&&electron多端運(yùn)行
這篇文章主要介紹了如何使用yarn創(chuàng)建vite+vue3&&electron多端運(yùn)行,本文分步驟給大家介紹的非常詳細(xì),包括使用yarn創(chuàng)建vite+vue3項(xiàng)目會遇到哪些問題,感興趣的朋友跟隨小編一起看看吧2024-03-03vue 動態(tài)設(shè)置img的src地址無效,npm run build 后找不到文件的解決
這篇文章主要介紹了vue 動態(tài)設(shè)置img的src地址無效,npm run build 后找不到文件的解決,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-07-07Vue?和?Django?實(shí)現(xiàn)?Token?身份驗(yàn)證的流程
這篇文章主要介紹了Vue?和?Django?實(shí)現(xiàn)?Token?身份驗(yàn)證?,Vue.js?和?Django?編寫的前后端項(xiàng)目中,實(shí)現(xiàn)了基于?Token?的身份驗(yàn)證機(jī)制,其他前后端框架的?Token?實(shí)現(xiàn)原理與本文一致,需要的朋友可以參考下2022-08-08vue項(xiàng)目base64字符串轉(zhuǎn)圖片的實(shí)現(xiàn)代碼
這篇文章主要介紹了vue項(xiàng)目base64字符串轉(zhuǎn)圖片的實(shí)現(xiàn)代碼,非常不錯,具有一定的參考借鑒價值,需要的朋友可以參考下2018-07-07