scrollTop
可以用來判斷頁面當(dāng)前滑動的位置,可以根據(jù)這個(gè)值實(shí)現(xiàn)滑動頁面到特定位置時(shí)展示某些內(nèi)容键思;或者通過設(shè)定這個(gè)值讓頁面滑動話指定位置。通常通過下面的方式獲取這個(gè)值。
let scrollTop =
window.pageYOffset ||
document.documentElement.scrollTop ||
document.body.scrollTop;
但是在開發(fā)移動端Vue項(xiàng)目的時(shí)候流妻,經(jīng)常出現(xiàn)獲取到的scrollTop
值為0的情況。事實(shí)上笆制,從上面的獲取方式可以看出绅这,我們是在獲取body
或者document
的滑動距離,但是一般的單頁應(yīng)用都是固定一個(gè)頭部或者腳部在辆,中間的元素(路由出口)才是真正的頁面证薇。這就導(dǎo)致了滑動的其實(shí)不是body
或者document
,而是一個(gè)元素匆篓,一個(gè)div
浑度,自然不能用上面的方法獲取到scrollTop。
所以我們可以曲線救國鸦概。
曲線救國一:獲取頁面滑動距離
假設(shè)頁面的滑動部分類名是page
// layout.vue
<header></header>
<router-view class="page"></router-view>
<footer></footer>
// test.vue
<script>
let page = document.getElementsByClassName('page')[0]
let scrollTop = page.getBoundingClientRect().top * -1
</script>
需要注意的是箩张,通過getBoundingClientRect()
獲取的值是負(fù)的
曲線救國二:讓頁面滾動到指定位置
let page = document.getElementsByClassName('page')[0]
page.scrollIntoView()
// 動畫效果
page.scrollIntoView({ behavior: 'smooth' })
上面是一個(gè)回到頂部的例子,scrollIntoView()
讓元素滾動到窗口內(nèi)(橫向滾動的也可以)窗市,加上{ behavior: 'smooth' }
可以讓滾動擁有動畫效果先慷,但需要注意兼容性。