最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

vue3組合式api實現(xiàn)v-lazy圖片懶加載的方法實例

 更新時間:2022年09月27日 11:39:07   作者:困頓小狗  
vue作為前端主流的3大框架之一,目前在國內(nèi)有著非常廣泛的應(yīng)用,下面這篇文章主要給大家介紹了關(guān)于vue3組合式api實現(xiàn)v-lazy圖片懶加載的相關(guān)資料,需要的朋友可以參考下

前置知識

Intersection Observer

瀏覽器提供api,用于檢測目標(biāo)元素和祖先元素/頂級文檔視窗 (viewport) 交叉狀態(tài)的方法。

    const observer = new IntersectionObserver(function (IntersectionObserverEntry) {},options);
    observer.observe(el);

構(gòu)造函數(shù)接收一個回調(diào)函數(shù),一個配置對象(可選),返回一個觀察器實例。實例的observe方法接收一個dom節(jié)點作為觀察的對象
當(dāng)目標(biāo)對象出現(xiàn)在視口的時候,會調(diào)用回調(diào)函數(shù),傳遞一個元素都為IntersectionObserverEntry對象的數(shù)組。

IntersectionObserverEntry對象有以下屬性 (只列舉了這篇用到的兩個):

  • target:被觀察的目標(biāo)元素,是一個 DOM 節(jié)點對象
  • intersectionRatio:目標(biāo)元素的可見比例,即intersectionRect占boundingClientRect的比例,完全可見時為1,完全不可見時小于等于0

Vue3指令周期

  • created:在綁定元素的 attribute 或事件監(jiān)聽器被應(yīng)用之前調(diào)用;
  • beforeMount:當(dāng)指令第一次綁定到元素并且在掛載父組件之前調(diào)用;
  • mounted:在綁定元素的父組件被掛載后調(diào)用;
  • beforeUpdate:在更新包含組件的 VNode 之前調(diào)用;
  • updated:在包含組件的 VNode 及其子組件的 VNode 更新后調(diào)用;
  • beforeUnmount:在卸載綁定元素的父組件之前調(diào)用;
  • unmounted:當(dāng)指令與元素解除綁定且父組件已卸載時,只調(diào)用一次;

image對象

Image 對象代表嵌入的圖像。

  • onload 當(dāng)圖像裝載完畢時調(diào)用的回調(diào)函數(shù)。

思路

想要的效果 在有多個圖片加載的時候 只要在最外面的wrapper上用一次v-lazy就可以

每張圖片的src先用加載gif替換掉,然后再放到文檔碎片里面,等到用戶滑動到視口了再掛載上圖片元素,之前一直使用加載的gif占位,等圖片加載完成再替換。

 首先vue3的指令跟組件類似也有生命周期,created的時候指令綁定的dom元素還沒有attribute,也沒有DOM結(jié)構(gòu),所以不適合,mounted整個DOM元素已經(jīng)掛載到頁面上了,圖片在掛載上去的時候就開始加載,再做懶加載已經(jīng)沒有意義了,所以使用beforeMount,有完整的DOM結(jié)構(gòu),但是沒有掛載到頁面上。

完整代碼

export const lazyLoad = {
  beforeMount(el: any, binding: any, vnode: any, prevVnode: any) {
    const img = el.querySelector(`.${el.className} img`);
    const src = img.getAttribute("src");
    // 圖片使用loading gif替換
    img.setAttribute("src", "https://m.tea7.com/images/imgLoading.gif");
    // 新建Image對象
    const tempImg = new Image();
    tempImg.onload = function () {
      img.setAttribute("src", src);
    };
    const parent = img.parentNode;
    const observer = new IntersectionObserver(function (changes) {
      // 可視
      changes.forEach((item) => {
        if (item.intersectionRatio !== 0) {
          tempImg.src = src;
        }
      });
    });
    observer.observe(el);
  },
};

參考鏈接:

IntersectionObserver API 使用教程

總結(jié)

到此這篇關(guān)于vue3組合式api實現(xiàn)v-lazy圖片懶加載的文章就介紹到這了,更多相關(guān)vue3實現(xiàn)v-lazy圖片懶加載內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Vue路由跳轉(zhuǎn)傳參或者打開新頁面跳轉(zhuǎn)問題

    Vue路由跳轉(zhuǎn)傳參或者打開新頁面跳轉(zhuǎn)問題

    這篇文章主要介紹了Vue路由跳轉(zhuǎn)傳參或者打開新頁面跳轉(zhuǎn)問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-03-03
  • vue-router后臺鑒權(quán)流程實現(xiàn)

    vue-router后臺鑒權(quán)流程實現(xiàn)

    本文主要介紹了vue-router后臺鑒權(quán)流程實現(xiàn),文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2022-08-08
  • Vue自定義toast組件的實例代碼

    Vue自定義toast組件的實例代碼

    這篇文章主要介紹了Vue自定義toast組件的相關(guān)資料,需要的朋友可以參考下
    2018-08-08
  • Vue封裝全局過濾器Filters的步驟

    Vue封裝全局過濾器Filters的步驟

    這篇文章主要介紹了Vue封裝全局過濾器Filters的步驟,通過封裝vue全局過濾器實現(xiàn)filters的統(tǒng)一管理。感興趣的朋友可以了解下
    2020-09-09
  • 使用vue項目配置多個代理的注意點

    使用vue項目配置多個代理的注意點

    這篇文章主要介紹了使用vue項目配置多個代理的注意點,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-07-07
  • Vue.js進行查詢操作的實例詳解

    Vue.js進行查詢操作的實例詳解

    這篇文章主要介紹了Vue.js進行查詢操作的實例詳解的相關(guān)資料,需要的朋友可以參考下
    2017-08-08
  • 利用Vue實現(xiàn)簡易播放器的完整代碼

    利用Vue實現(xiàn)簡易播放器的完整代碼

    這篇文章主要給大家介紹了關(guān)于如何利用Vue實現(xiàn)簡易播放器的相關(guān)資料,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-12-12
  • 解決vue項目 build之后資源文件找不到的問題

    解決vue項目 build之后資源文件找不到的問題

    這篇文章主要介紹了解決vue項目 build之后資源文件找不到的問題,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-09-09
  • vue3的reactive賦值問題解決

    vue3的reactive賦值問題解決

    vue3中直接對reactive聲明的變量本身進行賦值是無效的,本文主要介紹了vue3的reactive賦值問題解決,具有一定的參考價值,感興趣的可以了解一下
    2024-03-03
  • VUE中常用的四種高級方法總結(jié)

    VUE中常用的四種高級方法總結(jié)

    開發(fā)vue項目的時候一般都會開發(fā)很多自定義的全局組件,下面這篇文章主要給大家總結(jié)介紹了關(guān)于VUE中常用的四種高級方法,文中通過示例代碼介紹的非常詳細,需要的朋友可以參考下
    2023-05-05

最新評論

周至县| 陵川县| 澄迈县| 辽宁省| 西乌珠穆沁旗| 萝北县| 沐川县| 澄城县| 乡宁县| 德兴市| 靖远县| 安康市| 鸡泽县| 滦平县| 虞城县| 岱山县| 略阳县| 凤冈县| 安徽省| 祁阳县| 五大连池市| 天峻县| 饶河县| 洛阳市| 吉水县| 平江县| 扎鲁特旗| 道真| 全椒县| 格尔木市| 滕州市| 霍州市| 团风县| 鲁山县| 汝州市| 邓州市| 综艺| 大邑县| 凤庆县| 彩票| 陈巴尔虎旗|