vue頁面設置滾動失敗的完美解決方案(scrollTop一直為0)
目錄
- vue頁面設置滾動失敗的解決方案(scrollTop一直為0)
- 背景
- 誤區:
- 什么時候存在滾動條?
- Why scrollTop==0?
- 如何判斷頁面的滾動條是哪個div產生的?
vue頁面設置滾動失敗的解決方案(scrollTop一直為0)
背景
希望頁面能跳轉到 某一位置用到了scrollTop屬性??墒前l現給某個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頁面滾動失敗內容請搜索以前的文章或繼續瀏覽下面的相關文章希望大家以后多多支持!