vue.js 3.2.22:用useIntersectionObserver監控多行數據的可見性(@vueuse/core@7.0.3)


一,安裝所需的庫@vueuse/core

liuhongdi@lhdpc:/data/vue/lazy$ npm install --save @vueuse/core

說明:劉宏締的架構森林是一個專注架構的博客,地址:https://www.cnblogs.com/architectforest

         對應的源碼可以訪問這里獲取: https://github.com/liuhongdi/
         或: https://gitee.com/liuhongdi

說明:作者:劉宏締 郵箱: 371125307@qq.com

二,編寫代碼

Visible.vue

<template>
  <div>
    <div>
      <div data-bg="0" v-for="item in 5" :key="item" :ref="setItemRef" style="height: 500px;">
        {{item}}
      </div>
    </div>
  </div>
</template>
<script>
import {onMounted} from "vue";
import { useIntersectionObserver } from '@vueuse/core'

export default {
  setup() {
    let itemRefs = []
    const setItemRef = el => {
      if (el) {
        itemRefs.push(el)
      }
    }

    //掛載后
    onMounted(()=>{
      //為各個div添加監控事件
      console.log("onMounted div的數量:"+itemRefs.length);
      for (let i=0;i<itemRefs.length;i++) {
        console.log(itemRefs[i]);
        useIntersectionObserver(itemRefs[i], ([{ isIntersecting }]) => {
          // 如果target對應的DOM進入可視區,那么該回調函數就觸發
          if (isIntersecting) {
            // 被監聽的DOM進入了可視區:此時調用接口獲取數據;停止繼續監聽
            stop()
            if (itemRefs[i].dataset.bg === '0') {
              console.log(""+i+"個div已顯示");
              //修改背景色
              itemRefs[i].dataset.bg = 1;
              itemRefs[i].style.background=getColor(i);
            }

          }
        })
      }
    })

    //返回顏色,使各個div區分開
    const getColor = (idx) => {
        if (idx == 0){
          return "#ffff00";
        } else if (idx == 1) {
          return "#ff00ff";
        } else if (idx == 2) {
          return "#00ffff";
        } else if (idx == 3) {
          return "#0000ff";
        } else if (idx == 4) {
          return "#00ff00";
        } else {
          return "#ff0000";
        }
    }

    return {
      setItemRef,
      print
    }
  }
}
</script>

 

三,測試效果

1,剛打開時:

 

 查看log:

 

 從調試信息中可以看到只有兩個div被判斷為可見

2,向下滑動后:

 

 查看調試信息:

 

 可以看到前四個div都被判斷為可見

四,查看vue和vueuse的版本

liuhongdi@lhdpc:/data/vue/lazy$ npm list vue
lazy@0.1.0 /data/vue/lazy
├─┬ @vue/cli-plugin-babel@4.5.15
│ └─┬ @vue/babel-preset-app@4.5.15
│   └── vue@3.2.22 deduped
├─┬ @vueuse/core@7.0.3
│ ├─┬ @vueuse/shared@7.0.3
│ │ └── vue@3.2.22 deduped
│ ├─┬ vue-demi@0.12.1
│ │ └── vue@3.2.22 deduped
│ └── vue@3.2.22 deduped
└─┬ vue@3.2.22
  └─┬ @vue/server-renderer@3.2.22
    └── vue@3.2.22 deduped

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM