中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

怎么在vue中利用@scroll監聽滾動事件

發布時間:2021-03-23 16:21:04 來源:億速云 閱讀:1742 作者:Leah 欄目:web開發

本篇文章給大家分享的是有關怎么在vue中利用@scroll監聽滾動事件,小編覺得挺實用的,因此分享給大家學習,希望大家閱讀完這篇文章后可以有所收獲,話不多說,跟著小編一起來看看吧。

在.vue的組件中

<template>
 <div class="body-container" @scroll="scrollEvent">
 <ul>
 <li></li>
 ……
 <li></li>
 </ul>
 </div>
<template>
export default {
 name: 'demo',
 data () {
  return {
  msg: '',
  }
 },
 methods: {
  scrollEvent(e){
  console.log(e)
  },
 }
}

照上面的寫法,我發現即使我的li標簽足夠多,撐滿一頁,頁面滾動的時候并不能觸發到scrollEvent,是什么原因呢?

經過仔細思考,猜想應該是滾動事件并不是在我<div class="body-container" @scroll="scrollEvent">這個div上觸發的,因為滾動條并沒有出現在我這個div上。這個div完全被li標簽撐起來了,產生滾動事件的就是document了。

于是做了一個小試驗,定義一個固定高度的div

<div  @scroll="scrollEvent">
 <div ></div>
 <div ></div>
 <div ></div>
</div>

當我在這個300px固定高度的div中滾動的時候,果然觸發了scrollEvent,問題原因找到了,接下來就是解決了。

只要我能讓<div class="body-container" @scroll="scrollEvent">擁有固定高度,就能觸發滾動事件了。

但是固定高度怎么給呢,各個廠商的手機屏幕高度都是不一樣的,總不能讓某些手機顯示不完全,或者底部留空白吧。

當然后辦法啦!就是吧html,body,.body-container{height:100%}這樣,我的.body-container就能繼承到document的高度了;

還有另一個辦法,讓.body-container使用fixed定位

.body-container{
 position: fixed;
 top:6rem;
 left: 0;
 right:0;
 bottom: 0;
 overflow: auto
}

因為上下左右的位置都固定了,所以div自然也就有了固定高度,此方法適用于頁面有一個固定高度的頭部導航,我項目中有一個6rem高的頭部導航,所以我采用了fixed定位。

接下來就是驗證是否滑到了底部

export default {
 name: 'demo',
 data () {
  return {
  msg: '',
  }
 },
 methods: {
  scroll(e){
  //滾動的像素+容器的高度>可滾動的總高度-100像素
  if(e.srcElement.scrollTop+e.srcElement.offsetHeight>e.srcElement.scrollHeight-100){
   this.loadMore(); //加載更多
  }
  },
 }
}

這樣就能比較清晰的判斷是否滾動到了底部。但是如果僅僅這樣寫,當滾動到底部100px內時,會觸發很多次加載更多,所以我們需要增加一些判斷條件

methods: {
  scroll(e){
  // !this.moreLoading 沒有在加載狀態,觸發加載更多時,把this.moreLoading置未true
  // !this.noMore 沒有更多的狀態為false,當我們取到的數據長度小于1頁的數量時,就沒有更多了數據了,把 this.noMore置為true,這樣就不會觸發無意義的加載更多了
  if(e.srcElement.scrollTop+e.srcElement.offsetHeight>e.srcElement.scrollHeight-100 && !this.moreLoading && !this.noMore){
   this.loadMore();
  }
  },
 }

以上就是怎么在vue中利用@scroll監聽滾動事件,小編相信有部分知識點可能是我們日常工作會見到或用到的。希望你能通過這篇文章學到更多知識。更多詳情敬請關注億速云行業資訊頻道。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

称多县| 和平区| 黄大仙区| 阿克苏市| 仁寿县| 河间市| 宜城市| 抚宁县| 江山市| 鲁甸县| 德令哈市| 通化市| 柳江县| 陇南市| 方山县| 龙口市| 石棉县| 凤山县| 西充县| 岳池县| 德兴市| 承德市| 贵德县| 崇阳县| 阜宁县| 竹北市| 广南县| 常州市| 澄江县| 上杭县| 延安市| 浦城县| 马关县| 沧州市| 淮安市| 郁南县| 河北省| 呼伦贝尔市| 伊金霍洛旗| 朝阳区| 侯马市|