<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
本文範例為大家分享了vue實現側邊定位欄的具體程式碼,供大家參考,具體內容如下
1.通過點選側邊欄,定位到響應的內容
2.滑動滑動欄,側邊欄同步高亮對應的item
效果圖如下:
1. 通過點選側邊欄,定位到響應的內容
如果是用html的話我們可以用 錨點 的辦法進行定位;
在vue中,我們可以通過獲取元件的高度,將滑動欄定位到對應的位置
在進入主題之前我們需要先了解3個關於獲取高度的屬性
1.scrollTop 滑動欄中的滾軸離視區最頂部的距離
document.documentElement.scrollTop || document.body.scrollTop
2.clientHeight 視區的高度
document.documentElement.clientHeight || document.body.clientHeight
3.scrollHeight 滑動欄裡面的滑動塊的高度
document.documentElement.scrollHeight || document.body.scrollHeight
vue中我們可以通過this.$refs.xxx.$el.offsetTop
獲取元件距離頁面最頂部的距離,通過賦值給document.documentElement.scrollTop
選中元件距離頁面最頂部的高度,控制滑動框滑到頁面對應位置。相關程式碼如下:
頁面程式碼
// 頁面元件程式碼 <div> <btl-header /> <div class="reports"> <side-bar v-bind="sideBarData" /> <div class="main"> <live-overview-part ref="liveOverview" :shopNameOptions="allShopName" :dateSelectorData="dateType_0" /> <procurenment-alert ref="procurenmentAlert" :carBrandOptions="carBrandOptions" :shopNameOptions="allShopName" :dateSelectorData="dateType_2" /> <sales-overview ref="salesOverview" :shopNameOptions="allShopName" :dateSelectorData1="pardsType_0" :dateSelectorData2="dateType_1" /> <inquiry-data ref="inquiryData" :shopNameOptions="allShopName" :dateSelectorData="dateType_2" /> <transaction-data ref="transactionData" :carBrandOptions="carBrandOptions" :shopNameOptions="allShopName" :qualityOptions="qualityOptions" :colorSeries="colorSeries" :dateSelectorData="dateType_2" /> </div> </div> // 獲取元件距離頁面頂部高度 !!! <script> mounted() { // !!注意,需要頁面渲染完才能獲取各個盒子的高度 this.sideBarData.offsetTopliveOverview = this.$refs.liveOverview.$el.offsetTop; this.sideBarData.offsetTopprocurenmentAlert = this.$refs.procurenmentAlert.$el.offsetTop; this.sideBarData.offsetTopsalesOverview = this.$refs.salesOverview.$el.offsetTop; this.sideBarData.offsetTopinquiryData = this.$refs.inquiryData.$el.offsetTop; this.sideBarData.offsetToptransactionData = this.$refs.transactionData.$el.offsetTop; }, </script>
側邊欄實現程式碼
// 側邊欄程式碼 <template> <hn-card class="sidebar"> <ul class="nav-tabs"> <li class="activeTip" ref="activeTip"></li> <li @click="clickanchor('liveOverview',0)" class="item" :class="active==='liveOverview'?'active':'noActive'">實時總覽</li> <li class="item" :class="active==='procurenmentAlert'?'active':'noActive'" @click="clickanchor('procurenmentAlert',1)">採購預警</li> <li class="item" :class="active==='salesOverview'?'active':'noActive'" @click="clickanchor('salesOverview',2)">銷售概覽</li> <li class="item" :class="active==='inquiryData'?'active':'noActive'" @click="clickanchor('inquiryData',3)">詢價資料</li> <li class="item" :class="active==='transactionData'?'active':'noActive'" @click="clickanchor('transactionData',4)">交易資料</li> <li class="item" :class="active==='top'?'active':'noActive'" @click="clickanchor('top')">返回頂部</li> </ul> </hn-card> </template> // 側邊欄js <script> methods: { // 點選側邊欄item時觸發 // 通過document.documentElement.scrollTop控制滑動欄位置 clickanchor(itemName, i) { if (itemName === 'top') { document.documentElement.scrollTop = 0; // 滑動欄位置 this.active = itemName; this.$refs.activeTip.style.transform = `translateY(${196}px)`; return; } this.$refs.activeTip.style.transform = `translateY(${i * 39}px)`; document.documentElement.scrollTop = this[`offsetTop${itemName}`]; this.active = itemName; }, </script>
2. 滑動滑動欄,側邊欄同步高亮對應的item
通過監聽滑動欄滑動,獲取滑動塊距離頁面頂部的高度,和元件距離頁面頂部的高度進行對比,反向設定滑動欄的高亮位置;
// 監聽滑動欄捲動,通過監聽捲動到的位置,到 scrollChange() { const scrollTop = document.documentElement.scrollTop || document.body.scrollTop || 0; const windowHeight = document.documentElement.clientHeight || document.body.clientHeight || 0; const scrollHeight = document.documentElement.scrollHeight || document.body.scrollHeight || 0; const allContentOffsettop = [ 'offsetTopliveOverview', 'offsetTopprocurenmentAlert', 'offsetTopsalesOverview', 'offsetTopinquiryData', 'offsetToptransactionData']; if (scrollTop === 0) { if (this.active !== 'top') { this.active = 'top'; this.$refs.activeTip.style.transform = `translateY(${196}px)`; } } else if (scrollTop + windowHeight > scrollHeight || scrollTop + windowHeight === scrollHeight) { if (this.active !== 'transactionData') { this.active = 'transactionData'; this.$refs.activeTip.style.transform = `translateY(${157}px)`; } } else { for (let i = 0; i < allContentOffsettop.length; i++) { if (this[allContentOffsettop[i]] - 1 > scrollTop) { const contentName = allContentOffsettop[i - 1].replace('offsetTop', ''); if (this.active !== contentName) { this.active = contentName; this.$refs.activeTip.style.transform = `translateY(${(i - 1) * 39}px)`; } break; } } } }, }, };
以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支援it145.com。
相關文章
<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
综合看Anker超能充系列的性价比很高,并且与不仅和iPhone12/苹果<em>Mac</em>Book很配,而且适合多设备充电需求的日常使用或差旅场景,不管是安卓还是Switch同样也能用得上它,希望这次分享能给准备购入充电器的小伙伴们有所
2021-06-01 09:31:42
除了L4WUDU与吴亦凡已经多次共事,成为了明面上的厂牌成员,吴亦凡还曾带领20XXCLUB全队参加2020年的一场音乐节,这也是20XXCLUB首次全员合照,王嗣尧Turbo、陈彦希Regi、<em>Mac</em> Ova Seas、林渝植等人全部出场。然而让
2021-06-01 09:31:34
目前应用IPFS的机构:1 谷歌<em>浏览器</em>支持IPFS分布式协议 2 万维网 (历史档案博物馆)数据库 3 火狐<em>浏览器</em>支持 IPFS分布式协议 4 EOS 等数字货币数据存储 5 美国国会图书馆,历史资料永久保存在 IPFS 6 加
2021-06-01 09:31:24
开拓者的车机是兼容苹果和<em>安卓</em>,虽然我不怎么用,但确实兼顾了我家人的很多需求:副驾的门板还配有解锁开关,有的时候老婆开车,下车的时候偶尔会忘记解锁,我在副驾驶可以自己开门:第二排设计很好,不仅配置了一个很大的
2021-06-01 09:30:48
不仅是<em>安卓</em>手机,苹果手机的降价力度也是前所未有了,iPhone12也“跳水价”了,发布价是6799元,如今已经跌至5308元,降价幅度超过1400元,最新定价确认了。iPhone12是苹果首款5G手机,同时也是全球首款5nm芯片的智能机,它
2021-06-01 09:30:45