vue項(xiàng)目設(shè)置scrollTop不起作用(總結(jié))
今天在開發(fā)中,遇到這樣一個(gè)情景。一個(gè)頁面中有三個(gè)模塊,每個(gè)模塊對應(yīng)一個(gè)標(biāo)題,每個(gè)模塊內(nèi)容都很長,所以需要點(diǎn)擊當(dāng)前模塊對應(yīng)的標(biāo)題滾動(dòng)到模塊所在位置。
我想的方案是獲取到每個(gè)模塊距離文檔頂部的距離,然后將值賦給對應(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è)模塊距離文檔頂部的距離了,然后賦值給對應(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) // 查看打印的值是否有變化 如果有 則說明滾滾動(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)
})
}
}
以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
vue項(xiàng)目實(shí)現(xiàn)webpack配置代理,解決跨域問題
這篇文章主要介紹了vue項(xiàng)目實(shí)現(xiàn)webpack配置代理,解決跨域問題,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-04-04
element多個(gè)表單校驗(yàn)的實(shí)現(xiàn)
在項(xiàng)目中,經(jīng)常會(huì)遇到表單檢驗(yàn),在這里我分享在實(shí)際項(xiàng)目中遇到多個(gè)表單同時(shí)進(jìn)行校驗(yàn)以及我的解決方法,感興趣的可以了解一下2021-05-05
vue3中輕松實(shí)現(xiàn)switch功能組件的全過程
這篇文章主要給大家介紹了關(guān)于vue3中輕松實(shí)現(xiàn)switch功能組件的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2021-01-01
vue項(xiàng)目打包后,由于html被緩存導(dǎo)致出現(xiàn)白屏的處理方案
這篇文章主要介紹了vue項(xiàng)目打包后,由于html被緩存導(dǎo)致出現(xiàn)白屏的處理方案,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-03-03
vue3使用Electron打包成exe的方法與打包報(bào)錯(cuò)解決
在前端開發(fā)中,Electron是一種常用的工具,它允許開發(fā)者使用Web技術(shù)構(gòu)建桌面應(yīng)用程序,本文主要介紹了vue3使用Electron打包成exe的方法與打包報(bào)錯(cuò)解決,具有一定的參考價(jià)值,感興趣的可以了解一下2024-06-06
vue+axios?methods方法return取不到值問題及解決
這篇文章主要介紹了vue+axios?methods方法return取不到值問題及解決,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-10-10

