<output id="qn6qe"></output>

    1. <output id="qn6qe"><tt id="qn6qe"></tt></output>
    2. <strike id="qn6qe"></strike>

      亚洲 日本 欧洲 欧美 视频,日韩中文字幕有码av,一本一道av中文字幕无码,国产线播放免费人成视频播放,人妻少妇偷人无码视频,日夜啪啪一区二区三区,国产尤物精品自在拍视频首页,久热这里只有精品12

      Vue Hook 封裝圖片懶加載通用業(yè)務(wù)

       

      一、什么是圖片懶加載

      圖片懶加載(Lazy Loading)是一種在用戶需要的時候(通常是滾動到可視區(qū)域)才加載圖片的技術(shù)。通過這種方式,可以減少頁面的初始加載時間,減少帶寬消耗,提高用戶體驗。

      二、Vue中使用Intersection Observer實現(xiàn)圖片懶加載

      Intersection Observer 是一個現(xiàn)代瀏覽器提供的API,用于異步觀察目標(biāo)元素與其祖先元素或視窗(viewport)交叉狀態(tài)的變化。我們可以利用這個API來實現(xiàn)圖片的懶加載。

      三、封裝一個通用的圖片懶加載 Hook

      首先,我們創(chuàng)建一個自定義的 Vue Hook,用于實現(xiàn)圖片懶加載功能。

      1. 創(chuàng)建 useLazyLoad Hook

      src/hooks 目錄下創(chuàng)建一個 useLazyLoad.js 文件:

      import { ref, onMounted, onUnmounted } from 'vue';
      
      export function useLazyLoad(imageSelector) {
        const images = ref([]);
      
        const loadImage = (entries, observer) => {
          entries.forEach(entry => {
            if (entry.isIntersecting) {
              const img = entry.target;
              img.src = img.dataset.src;
              observer.unobserve(img);
            }
          });
        };
      
        const observer = new IntersectionObserver(loadImage, {
          root: null,
          rootMargin: '0px',
          threshold: 0.1,
        });
      
        onMounted(() => {
          images.value = document.querySelectorAll(imageSelector);
          images.value.forEach(img => {
            observer.observe(img);
          });
        });
      
        onUnmounted(() => {
          if (images.value.length) {
            images.value.forEach(img => {
              observer.unobserve(img);
            });
          }
        });
      
        return {
          images,
        };
      }

       

      2. 使用 useLazyLoad Hook

      組件中使用這個 Hook 來實現(xiàn)圖片懶加載。

      
      

      <template>
      <div>
      <img v-for="(image, index) in imageList" :key="index" :data-src="image.src" class="lazy-load" alt="Image"/>
      </div>
      </template>

      
      

      <script>
      import { ref } from 'vue';
      import { useLazyLoad } from '@/hooks/useLazyLoad';

      
      

      export default {
      setup() {
      const imageList = ref([
      { src: 'https://via.placeholder.com/600x400?text=Image+1' },
      { src: 'https://via.placeholder.com/600x400?text=Image+2' },
      { src: 'https://via.placeholder.com/600x400?text=Image+3' },
      // 更多圖片...
      ]);

      
      

      useLazyLoad('.lazy-load');

      
      

      return {
      imageList,
      };
      },
      };
      </script>

      
      

      <style>
      /* 可以添加一些樣式,比如占位圖等 */
      .lazy-load {
      width: 100%;
      height: auto;
      opacity: 0;
      transition: opacity 0.3s;
      }

      
      

      .lazy-load[src] {
      opacity: 1;
      }
      </style>

       

       

      四、解釋代碼

      1. 定義 useLazyLoad Hook

        • 使用 Vue 的 refonMountedonUnmounted 組合 API。
        • loadImage 函數(shù)處理圖片的實際加載:當(dāng)圖片進入視窗時,設(shè)置圖片的 src 屬性,并停止觀察該圖片。
        • 使用 IntersectionObserver API 觀察圖片元素的可見性變化。
      2. 在組件中使用 Hook

        • 使用 ref 定義一個圖片列表。
        • 調(diào)用 useLazyLoad 并傳遞圖片的選擇器(.lazy-load)。
        • 在模板中,使用 v-for 指令渲染圖片列表,并使用 data-src 屬性存儲圖片 URL,等待懶加載。
      posted @ 2024-08-01 20:04  最小生成樹  閱讀(196)  評論(2)    收藏  舉報
      主站蜘蛛池模板: 最新的国产成人精品2020| 国产精品综合av一区二区国产馆| 国产热A欧美热A在线视频| 亚洲色大成成人网站久久| 曰韩无码av一区二区免费| 黄色大全免费看国产精品| 亚洲精品第一页中文字幕| 免费乱理伦片在线观看| 人妻中文字幕精品一页| 亚洲sm另类一区二区三区| 国产91久久精品一区二区 | 国产精品自拍中文字幕| 久久综合开心激情五月天| 中文字幕国产原创国产| 好湿好紧太硬了我太爽了视频| 亚洲精品色哟哟一区二区| 亚洲一区二区精品另类| 亚洲AV成人片在线观看| 亚洲色大成网站www在线| 国产一区二区三区四区激情| 国产精品乱码久久久久久小说| 久久中文字幕日韩无码视频| 一区二区在线观看 激情| 久久精品国产久精国产69| 午夜通通国产精品福利| 久久一日本道色综合久久| 狠狠色噜噜狠狠亚洲AV| 亚洲一区二区精品动漫| 久久天天躁狠狠躁夜夜2020老熟妇 | 在线亚洲+欧美+日本专区| 中文字幕乱码在线播放| 深夜av在线免费观看| 国产精品天天在线午夜更新| 精品国产第一国产综合精品| 日韩深夜免费在线观看| 中国熟妇牲交视频| 91精品久久一区二区三区| 欧洲精品色在线观看| 台东县| 国产色a在线观看| 中文字幕无码免费久久|