Vue的Scroll滾動事件觸發(fā)方式
Scroll滾動事件觸發(fā)
切記 當(dāng)你需要滾動事件觸發(fā) 千萬不要加 overflow-y: auto; 一旦加了 就 全是 0
例子

去掉 overflow-y: auto;

如果你需要把這個(gè)頁面當(dāng)做子組件引入 需要加true 因?yàn)?···· 請看最后一張圖片 如果不加true 不變成捕獲事件 則無法成功引用
<template> ?? ?<div class="totop"> ?? ??? ?<div class="btnTop" v-if="btnFlag" @click="backTop()"> ?? ??? ??? ?<van-icon name="arrow-up" size="40" color="#CF9B6B" class="imga"/> ?? ??? ?</div> ?? ?</div> </template>
<script>
export default {
?? ?name: "totop",
?? ?data() {
?? ??? ?return {
?? ??? ??? ?btnFlag: false,
?? ??? ?};
?? ?},
?? ?// 利用VUE寫一個(gè)在控制臺打印當(dāng)前的scrollTop。首先,在 mounted 鉤子中給window添加一個(gè)滾動滾動監(jiān)聽事件
?? ?mounted() {
?? ??? ?window.addEventListener("scroll", this.scrollToTop,true);
?? ??? ?//如果你需要把這個(gè)頁面當(dāng)做子組件引入 需要加true 因?yàn)?···· ?請看最后一張圖片
?? ?},
?? ?destroyed() {
?? ??? ?window.removeEventListener("scroll", this.scrollToTop,true);
?? ?},
?? ?methods: {
?? ??? ?// 點(diǎn)擊圖片回到頂部方法,加計(jì)時(shí)器是為了過渡順滑
?? ??? ?backTop() {
?? ??? ??? ?let that = this;
?? ??? ??? ?let timer = setInterval(() => {
?? ??? ??? ??? ?let ispeed = Math.floor(-that.scrollTop / 5);
?? ??? ??? ??? ?document.documentElement.scrollTop = document.body.scrollTop =
?? ??? ??? ??? ??? ??? ?that.scrollTop + ispeed;
?? ??? ??? ??? ?if (that.scrollTop === 0) {
?? ??? ??? ??? ??? ?clearInterval(timer);
?? ??? ??? ??? ?}
?? ??? ??? ?}, 16);
?? ??? ?},
?? ??? ?// 監(jiān)聽回到頂部按鈕距瀏覽器頂部的距離,滾動的距離如果大于瀏覽器高度時(shí),設(shè)置 btnFlag 為true,否則就是false
?? ??? ?scrollToTop() {
?? ??? ??? ?let that = this;
?? ??? ??? ?let scrollTop = window.pageYOffset || document.documentElement.scrollTop || document.body.scrollTop;
?? ??? ??? ?that.scrollTop = scrollTop;
?? ??? ??? ?console.log(scrollTop)
?? ??? ??? ?//為了計(jì)算距離頂部的高度,當(dāng)高度大于50顯示回頂部圖標(biāo),小于50則隱藏
?? ??? ??? ?if (that.scrollTop > 50) {
?? ??? ??? ??? ?that.btnFlag = true;
?? ??? ??? ?} else {
?? ??? ??? ??? ?that.btnFlag = false;
?? ??? ??? ?}
?? ??? ?},
?? ?},
};
</script><style lang="scss" scoped>
.totop {
?? ?position: fixed;
?? ?right: 40px;
?? ?bottom: 60px;
?? ?width: 50px;
?? ?height: 50px;
?? ?padding: 10px;
?? ?cursor: pointer;
}
.imga {
?? ?position: relative;
?? ?top: -20px;
?? ?left: 15px;
?? ?text-align: center;
?? ?line-height: 50px;
?? ?border: 3px solid #CF9B6B;
?? ?width: 50px;
?? ?height: 50px;
?? ?border-radius: 50%;
}
</style>


監(jiān)聽Scroll事件無效
1.監(jiān)聽的dom元素設(shè)定高度,子元素的內(nèi)容要超過容器的高度
2.設(shè)定overflow為:auto/scroll,默認(rèn)值為visible,無法觸發(fā)
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
新手vue構(gòu)建單頁面應(yīng)用實(shí)例代碼
本篇文章主要介紹了新手vue構(gòu)建單頁面應(yīng)用實(shí)例代碼,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2017-09-09
用Vue?Demi同時(shí)支持Vue2和Vue3的方法
這篇文章主要介紹了用Vue?Demi同時(shí)支持Vue2和Vue3的方法,實(shí)際開發(fā)中,同一個(gè)API在不同的版本中可能導(dǎo)入的來源不一樣,比如ref方法,本文結(jié)合示例代碼給大家介紹的非常詳細(xì),需要的朋友可以參考下2022-12-12
Vue?Router中router.resolve方法使用實(shí)例
這篇文章主要給大家介紹了關(guān)于Vue?Router中router.resolve方法使用的相關(guān)資料,router.resolve方法在前端路由庫中用于解析路由信息,接受路徑或路由對象,返回解析后的?URL、路由和位置對象,需要的朋友可以參考下2024-11-11
如何使用Vue3+Vite+TS快速搭建一套實(shí)用的腳手架
Vite是一個(gè)面向現(xiàn)代瀏覽器的一個(gè)更輕、更快的?Web?應(yīng)用開發(fā)工具,下面這篇文章主要給大家介紹了關(guān)于如何使用Vue3+Vite+TS快速搭建一套實(shí)用腳手架的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),需要的朋友可以參考下2022-10-10
vuepress實(shí)現(xiàn)自定義首頁的樣式風(fēng)格
這篇文章主要介紹了vuepress實(shí)現(xiàn)自定義首頁的樣式風(fēng)格,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-08-08
vue實(shí)現(xiàn)自定義H5視頻播放器的方法步驟
這篇文章主要介紹了vue實(shí)現(xiàn)自定義H5視頻播放器的方法步驟,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2019-07-07

