1. 程式人生 > >vue中給window新增滾動監聽無效的解決方案

vue中給window新增滾動監聽無效的解決方案

頁面中有這麼一個需求,當頁面滾動到一定高度之後,頁面中的某些元素進行吸頂,固定到頂部位置,或者是滾動到一定程度進行更新資料的操作。
我相信不少網友查閱過類似的資料,網友給出的解決方案,很多都是在mounted中新增

window.addEventListener("scroll", this.handleScroll);

採用這種形式來實現頁面監聽滾動的效果。
筆者最初也是採用了這種方式,剛開始可以實現想要的效果,後來,莫名其妙的就不可用了,經過一番探討,使用監聽元件滾動的形式來解決這個問題,至於通過window來實現監聽為什麼突然就不可用了,筆者暫時還不清楚什麼原因造成的,有知道原因的歡迎留言。


想要實現監聽元件滾動的效果,首先需要給需要監聽的元件新增ref,以便可以通過this.$refs的形式拿到該元素的dom節點。
以簡單示例來說明,有一個a.vue的元件,我想監聽這個元件的滾動,那麼在該元件的容器元素上新增ref=”a”,然後通過下面的程式碼形式來操作:

// 通過$refs獲取dom元素
this.box = this.$refs.a
// 監聽這個dom的scroll事件
this.box.addEventListener('scroll', () => {
    this.handleScroll();
}, false)

上述程式碼為處理元件滾動監聽的主要程式碼內容。

handleScroll() {
    // 這是一個示例程式碼,打印出監聽滾動的元件滾動距離
    var scrollTop = this.$refs.a.scrollTop;
    console.log(scrollTop);
}

同樣的道理,如果想對a.vue元件內部的某一塊結點區域進行滾動監聽,也是採用這種方式。
注意點:
如果採用了上述方案沒有實現監聽滾動的效果,請檢查是否出現以下問題:
需要監聽滾動的元素結點是否給了height和overflow:scroll
需要監聽滾動的元素結點的父元素結點是否設定了高度
在vux中,如果你使用了view-box,你需要給view-box一個高度,因為view-box的父元素高度為100%,所以筆者採取的方案就是將view-box的高度也設定為100%。

<view-box ref="viewBox" style="height: 100%;">
    <router-view></router-view>
</view-box>

經檢測,此方案有效。

相關推薦

vuewindow新增滾動無效解決方案

頁面中有這麼一個需求,當頁面滾動到一定高度之後,頁面中的某些元素進行吸頂,固定到頂部位置,或者是滾動到一定程度進行更新資料的操作。 我相信不少網友查閱過類似的資料,網友給出的解決方案,很多都是在mounted中新增 window.addEventList

Vue實現錨點定位+滾動

在百度上始終沒有找到自己想要的效果,然後自己就手寫了個,話不多說,直接貼程式碼。<!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8"> <met

spannablestring用在fragment,設定點選無效

主要程式碼如下         @Override         public void onViewCreated(View view, @Nullable Bundle savedInstanceState) {             super.onViewCr

TNS-12541: TNS: 無程式 解決方案

轉自   感謝   https://www.cnblogs.com/yx007/p/6732012.html 問題描述 在用PL/SQL Developer連線Oracle 11g時報錯“ORA-12541: TNS: 無監聽程式”,如下圖所示。可以按照如下的步驟進

ajax非同步請求使用window.open會被瀏覽器攔截解決方案

問題剖析:function click_fun(){ window.open("www.baidu.com");//能開啟 $.ajax({ 'url': '${pageContext.request.contextPath}/activity/sav

關於vue滾動失效問題

top scrolltop ont bsp .cn vue 資料 index document 在vue項目中, 監聽window滾動失效;並且document.body.scrollTop一直是0的情況! 查找了許多資料;並沒有找到合理的解決方案; 最中發現,在in

vue當前頁面加滾動怎麼樣不影響其他頁面

最近利用vue寫了一個網站,在網站某一個頁面滾動到某一個地方後執行某一動化,所以要獲取拿一個div到頂部的距離,所以我在頁面載入的時候給window加了一個滾動的監聽 mounted(){ window.addEventListener('scroll', this.handleScro

UGUI的Button動態新增OnClick的BUG

Button[] players; //錯誤 for(int i =0;i<players.Length;i++) { players[i].onClick.AddListener (delegate() { this.PlayerBtnClick(playe

Android TV開發所有的遙控器按鍵及註意事項,新增home鍵

char 技術分享 ces num block eas article 分享 iou 原文:Android TV開發中所有的遙控器按鍵監聽及註意事項,新增home鍵監聽 簡單記錄

python3listbox新增垂直滾動條和水平滾動

#scrolly是垂直滾動條,scrolly2是水平滾動條 scrolly=Scrollbar(win,width=25,orient=VERTICAL) scrolly.grid(row=0,column=1,padx=(0,0),pady=(250,0),s

vue錨點定位+滾動+函式節流

此功能在上篇文章上增加了個函式節流 效能上會更好些。 <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="vi

Android TV開發所有的遙控器按鍵及注意事項,新增home鍵

簡單記錄下android 盒子開發遙控器的監聽 ,希望能幫到新入門的朋友們 不多說,直接貼程式碼 public class MainActivity extends Activity { private String TAG="key";

滾動

位置 position 用法 href data 也會 lis bar target 滾動監聽插件是用來根據滾動條所處的位置來自動更新導航項的。如下所示,滾動導航條下面的區域並關註導航項的變化。下拉菜單中的條目也會自動高亮顯示。 用法 依賴 Bootstrap 的導航組件

Jquery滾動和附加導航

jquery 導航 滾動監聽初學jquery,多多指教導航思路:設定nav導航的類。設定索引值。點擊導航內容,導航的索引和內容的索引一一對應。點擊導航欄,內容滑動一段距離。監聽: 1.滑動內容文檔時,索引值變動。 2.導航對應的索引所在內容高亮。下面是代碼<!--導航-->$(doc

Bootstrap 下拉菜單和滾動插件

bootstrap 下拉菜單和滾動監聽插件 一.下拉菜單 常規使用中,和組件方法一樣,代碼如下: //聲明式用法 <div class="dropdown"> <button class="btn btn-primary" data-toggle="dropdown"> 下拉菜

Bootstrap 學習筆記8 下拉菜單滾動

bsp http drop htm bar 下拉 overflow inf flow 代碼部分: <nav class="navbar navbar-default"> <a href="#" class="navba

vuebuttion按鈕添加鍵盤回車(enter)事件

key pan created date() tel pre prim nts add 一、給button按鈕綁定@keyup.enter <div class="btn"> <Button type="primary" @click="

Vue.js(13)- Watch資料變化

watch 監聽的特點:監聽到某個資料的變化後,側重於做某件事情; 只要被監聽的資料發生了變化,會自動觸發 watch 中指定的處理函式; app.vue <template> <div> <p>姓名:<input type="t

div新增滾動

最簡單的方法:   <div style="height:300px;width:100px;overflow:auto"><div/>(height和width根據需求設定)     注意:如果只寫height就只有垂直滾動條,只寫width就只有水平滾動條,都不寫

1.3 Vue的計算屬性和偵

Vue中的計算屬性和偵聽器 <!DOCTYPE html> <html> <head> <meta charset="utf-8" /> <title>Vue中的計算屬性和偵聽器</title> <!