vue頁面設置滾動失敗的完美解決方案(scrollTop一直為0)

vue頁面設置滾動失敗的解決方案(scrollTop一直為0)

背景

希望頁面能跳轉到 某一位置用到瞭scrollTop屬性。可是發現給某個div設置該屬性後,一致為0。找瞭很多方案,但不都適合自己,或者說不知道是否適合。

怎麼看我這個方法適不適合你,你可以嘗試打印滾動條的位置,頁面滾動後,再次打印滾動條的位置,如果一直為0的話,那我的的這個方法就可以解決你遇到的問題(說明你可能一直在打印窗口的滾動,而不是你真正需要控制滾動的那個元素).

誤區:

並不是一股腦設置window.scrollTop就可以讓頁面滾動的,scrollTop可以用來設置滾動條位置,但是你得找對元素,在路由嵌套的vue頁面中,window可能始終是沒有滾動的,而你頁面上顯示的滾動條也隻是頁面中的元素的滾動條.

什麼時候存在滾動條?

頁面佈局我們可以簡單理解為 div盒子套div盒子。當內側div盒子的高度大於外部時,外部的div就會出現滾動條。此時外部的div才具備scrollTop屬性,否則你無論如何設置都為0. 這裡隱藏瞭一些條件:

外部的div一定有高度,否則外部div將和內部div高度一致,不滿足大於條件,所以不會出現滾動條。 外部div的 overflow:auto。hidden的情況下超出的部分被隱藏,無法出現滾動條。 如果想設置滾動條屬性,一定要知道滾動條是哪個div產生的。

Why scrollTop==0?

總而言之,所有情況都是因為你給一個沒有滾動條的元素設置滾動條的位置。 這就涉及到一個知識點的誤區: "讓頁面滾動到指定位置這個需求,不一定是讓整個window滾動,在路由嵌套的vue頁面中,window可能始終是沒有滾動的,產生滾動條的是一個設置瞭固定高度,且子元素的高度超出瞭他本身的元素. 這時候,元素才會產生滾動條,而你一股腦的給window設置滾動條位置,window也蒙瞭"

如何判斷頁面的滾動條是哪個div產生的?

滾動滾輪,看是哪一塊元素在滾動(具體到div上).設置他的父元素的滾動條位置即可讓其滾動.

場景1:如何刪除body的滾動條,保留某個div的滾動條

body{overflow:hidden;}
div{
height:xxpx;    #小於子元素的高度
overflow-y:auto;
}

場景2:documentElement.scrollTop或者document.body.scrollTop 一直為0的情況

產生根本原因還是因為給沒有scrollTop的元素設定瞭該值,直接原因是因為瀏覽器兼容問題。

場景2:documentElement.scrollTop或者document.body.scrollTop 一直為0的情況 產生根本原因還是因為給沒有scrollTop的元素設定瞭該值,直接原因是因為瀏覽器兼容問題。

document.documentElement.scrollTop || document.body.scrollTop || window.pageYOffset

1 解決方法:在上面三個元素中逐一嘗試,總有一款可以設置上。

到此這篇關於vue頁面設置滾動失敗的解決方案(scrollTop一直為0)的文章就介紹到這瞭,更多相關vue頁面滾動失敗內容請搜索WalkonNet以前的文章或繼續瀏覽下面的相關文章希望大傢以後多多支持WalkonNet!

推薦閱讀: