日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 前端技术 > vue >内容正文

vue

Vue踩坑之旅(四)—— 自定义指令实现滚动加载

發(fā)布時間:2024/1/17 vue 46 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Vue踩坑之旅(四)—— 自定义指令实现滚动加载 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

這幾天在做商城首頁的商品列表,商品卡片的數(shù)量很多,如果一次性加載那么多,加載較慢,而且用戶體驗(yàn)不好。所以使用鼠標(biāo)無限滾動加載效果更好。 實(shí)現(xiàn)滾動加載的方式有很多,有現(xiàn)成的組件 InfiniteScroll,但是一些非主流瀏覽器無法觸發(fā),還是自己動手寫一寫吧。

實(shí)現(xiàn)滾動加載的核心:滾動條高度 + 瀏覽器窗口高度 >= 內(nèi)容高度 - 閾值

  • document.body.scrollTop 滾動條滾動的距離 (這個有兼容性問題,兼容性寫法)
    let scrollTop = document.documentElement.scrollTop || window.pageYOffset || document.body.scrollTop;
  • window.innerHeight 瀏覽器窗口高度
  • document.body.scrollHeight 內(nèi)容高度 (兼容性寫法)
    let bodyHeight = document.body.scrollHeight || document.documentElement.scrollHeight;
  • 自定義指令 v-scroll
  • directives: {/*** 滾動加載的自定義指令*/scroll: {bind(el, binding, vnode) {window.addEventListener('scroll', vnode.context.scrollLoad)},unbind(el, binding, vnode) {window.removeEventListener('scroll', vnode.context.scrollLoad)}} }, methods: {scrollLoad() {//滾動條高度(頁面被卷去高度)let scrollTop = document.documentElement.scrollTop || window.pageYOffset || document.body.scrollTop;//文檔高度let bodyHeight = document.body.scrollHeight || document.documentElement.scrollHeight;// 滾動條高度 + 瀏覽器高度 >= 文檔高度 - 閾值if (scrollTop + window.innerHeight >= bodyHeight - 300) {// 判斷請求發(fā)送標(biāo)志位,避免重復(fù)請求if (this.loading) return;// 加載的頁碼和每次滾動加載的數(shù)量,中data中聲明if (this.listIndex * this.PageQty >= this.total) return;this.listIndex++// 獲取商品數(shù)據(jù)的異步操作this.getProductList(this.listIndex)}} } 復(fù)制代碼

    這里需要注意:

  • 因?yàn)榘l(fā)送請求和滾動事件的方法定義在了組件的 methods中,需要拿到Vue實(shí)例,但在自定義指令里,不能通過 this 拿到Vue實(shí)例,而是通過指令鉤子函數(shù)的第三個參數(shù) vnode 的 context 屬性拿

  • 必須要在unbind鉤子中解綁滾動加載事件,否則在其他頁面也會被觸發(fā)。

  • 使用時,因?yàn)榛谖臋n高度和滾動條高度,綁在哪里無所謂。

    <template><div id="index" v-scroll><ul><li v-for="(item, index) in productList" :key="index"></li></ul></div> </template> 復(fù)制代碼

    轉(zhuǎn)載于:https://juejin.im/post/5d0b56b1e51d45775f516a74

    總結(jié)

    以上是生活随笔為你收集整理的Vue踩坑之旅(四)—— 自定义指令实现滚动加载的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。