vue項(xiàng)目設(shè)置scrollTop不起作用(總結(jié))
今天在開(kāi)發(fā)中,遇到這樣一個(gè)情景。一個(gè)頁(yè)面中有三個(gè)模塊,每個(gè)模塊對(duì)應(yīng)一個(gè)標(biāo)題,每個(gè)模塊內(nèi)容都很長(zhǎng),所以需要點(diǎn)擊當(dāng)前模塊對(duì)應(yīng)的標(biāo)題滾動(dòng)到模塊所在位置。
我想的方案是獲取到每個(gè)模塊距離文檔頂部的距離,然后將值賦給對(duì)應(yīng)要滾動(dòng)的元素。 步驟如下:
首先給每個(gè)模塊一個(gè)id,例如:
<div class="module module1" id="anchor-0"> <div class="module module1" id="anchor-1"> <div class="module module1" id="anchor-2">
點(diǎn)擊每個(gè)標(biāo)題的時(shí)候獲取到當(dāng)前模塊的id
<a v-for="(navItem,index) in navData" :key="index" class="navItem" :class="{active:index == i }" @click="goAnchor('#anchor-'+index)">{{navItem.name}}</a> methods: { // tab點(diǎn)擊滾動(dòng) goAnchor(val) { let anchor = this.$el.querySelector(val); }
*最后就可以獲取每個(gè)模塊距離文檔頂部的距離了,然后賦值給對(duì)應(yīng)要滾動(dòng)的元素就可以了
methods: { // tab滾動(dòng) goAnchor(val) { let anchor = this.$el.querySelector(val); this.$nextTick(() => { document.querySelector(".el-main").scrollTop = anchor.offsetTop; }); },
切記:在這里一定要加上this.$nextTick()方法,否則document.querySelector(“.el-main”).scrollTop的值永遠(yuǎn)為0,不會(huì)賦值成功的!
container.scrollTop 一直為0不能賦值的解決方法
watch: { historyList () { this.$nextTick(() => { const container = this.$el.querySelector('.scrolldivmain') console.log(container.scrollHeight) console.log(container.scrollTop) this.$refs.scrolldiv.scrollTo(0, container.scrollHeight + 'px') container.scrollTop = container.scrollHeight container.scrollTop(0, container.scrollHeight) console.log(container.scrollTop) // container.scrollTop 一直為0 }) } }
注意點(diǎn)
確定下滾動(dòng)條是在哪里顯示的
有個(gè)方法判斷下:
window.addEventListener('scroll', () => { var scrollTop = this.$el.querySelector('.scrolldivmain') // console.log(scrollTop.scrollHeight) console.log(scrollTop.scrollTop) // 查看打印的值是否有變化 如果有 則說(shuō)明滾滾動(dòng)條在這個(gè)標(biāo)簽中 // scrollTop.scrollTop = scrollTop.scrollHeight // 可以嘗試下 滾動(dòng)滾動(dòng)條。一直在底部則可以設(shè)置成功 }, true)
解決方案
需要用到的地方 調(diào)用this.scrollToBottom()即可
<!--element-ui--> <el-main class="scrolldivmain"> some code </el-main> methods: { // 滾動(dòng)到底部 scrollToBottom () { this.$nextTick(() => { setTimeout(() => { var scrollTop = this.$el.querySelector('.scrolldivmain') scrollTop.scrollTop = scrollTop.scrollHeight }, 13) }) } }
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
vue項(xiàng)目實(shí)現(xiàn)webpack配置代理,解決跨域問(wèn)題
這篇文章主要介紹了vue項(xiàng)目實(shí)現(xiàn)webpack配置代理,解決跨域問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-04-04vue 解除鼠標(biāo)的監(jiān)聽(tīng)事件的方法
這篇文章主要介紹了vue 解除鼠標(biāo)的監(jiān)聽(tīng)事件的方法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2019-11-11element多個(gè)表單校驗(yàn)的實(shí)現(xiàn)
在項(xiàng)目中,經(jīng)常會(huì)遇到表單檢驗(yàn),在這里我分享在實(shí)際項(xiàng)目中遇到多個(gè)表單同時(shí)進(jìn)行校驗(yàn)以及我的解決方法,感興趣的可以了解一下2021-05-05vue3中輕松實(shí)現(xiàn)switch功能組件的全過(guò)程
這篇文章主要給大家介紹了關(guān)于vue3中輕松實(shí)現(xiàn)switch功能組件的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2021-01-01vue項(xiàng)目打包后,由于html被緩存導(dǎo)致出現(xiàn)白屏的處理方案
這篇文章主要介紹了vue項(xiàng)目打包后,由于html被緩存導(dǎo)致出現(xiàn)白屏的處理方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-03-03vue3使用Electron打包成exe的方法與打包報(bào)錯(cuò)解決
在前端開(kāi)發(fā)中,Electron是一種常用的工具,它允許開(kāi)發(fā)者使用Web技術(shù)構(gòu)建桌面應(yīng)用程序,本文主要介紹了vue3使用Electron打包成exe的方法與打包報(bào)錯(cuò)解決,具有一定的參考價(jià)值,感興趣的可以了解一下2024-06-06vue+axios?methods方法return取不到值問(wèn)題及解決
這篇文章主要介紹了vue+axios?methods方法return取不到值問(wèn)題及解決,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-10-10