<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          手把手教你實(shí)現(xiàn)圖片懶加載

          共 1616字,需瀏覽 4分鐘

           ·

          2020-12-23 11:21

          來源 |?https://segmentfault.com/a/1190000024547276


          懶加載(Lazy-Load)。它是針對圖片加載時機(jī)的優(yōu)化:在一些圖片量比較大的網(wǎng)站(比如電商網(wǎng)站首頁,或者團(tuán)購網(wǎng)站、小游戲首頁等),如果我們嘗試在用戶打開頁面的時候,就把所有的圖片資源加載完畢,那么很可能會造成白屏、卡頓等現(xiàn)象,因?yàn)閳D片真的太多了,一口氣處理這么多任務(wù),瀏覽器做不到??!
          目的
          懶加載 的目的是當(dāng)頁面的圖片進(jìn)入到用戶的可視范圍之內(nèi)在加載圖片的一種優(yōu)化方式。
          可以增加首屏加載的速度,畢竟,用戶點(diǎn)開頁面的瞬間,呈現(xiàn)給他的只是首屏,我們只要把首屏的資源圖片加載處理就可以了,至于下面的圖片,當(dāng)用戶下滑當(dāng)當(dāng)前位置的時候,在加載出來也是沒問題的,對于性能壓力也小了,用戶體驗(yàn)也沒有變差。
          原理
          在頁面初始化的時候,圖片的src實(shí)際上是放在src屬性上的,當(dāng)元素處于可視范圍內(nèi)的時候,就把src賦值給src屬性,完成圖片加載。
          // 在一開始加載的時候
          // 在進(jìn)入可視范圍內(nèi)時

          使用背景圖來實(shí)現(xiàn),原理也是一樣的,把background-image放在,在可視范圍時,就把src賦值給src屬性,完成圖片加載。

          // 在一開始加載的時候

          // 在進(jìn)入可視范圍內(nèi)時

          實(shí)現(xiàn)一個懶加載

          基于上面的實(shí)現(xiàn)思路,自己實(shí)現(xiàn)一個懶加載。

          新建一個 index.html?中,為這些圖片預(yù)置 img 標(biāo)簽:

            
          加載中
          加載中
          加載中
          加載中
          加載中
          加載中
          加載中
          加載中
          加載中
          加載中

          在懶加載的實(shí)現(xiàn)中,有兩個關(guān)鍵的數(shù)值:一個是當(dāng)前可視區(qū)域的高度,另一個是元素距離可視區(qū)域頂部的高度。

          當(dāng)前可視區(qū)域的高度,在現(xiàn)代瀏覽器及 IE9 以上的瀏覽器中,可以使用window.innerHeight屬性獲取,在低版本的 IE 中使用document.documentElment.clientHeight 獲取,這里我們兼容兩種情況:

          const viewHeight = window.innerHeight || document.documentElement.clientHeight;

          而元素距離可視區(qū)域頂部的高度,這里我們用 getBoundingClientRect()方法來獲取返回元素的大小和相對于尺寸的位置,對于該 API,MDN 的解釋是:

          Element.getBoundingClientRect() 方法返回元素的大小及其相對于視口的位置。

          返回的屬性中有一個相對于可視區(qū)域頂部的高度也就是top屬性,剛好就是我們需要的元素距離頂部的距離。

          這樣,兩個屬性就都得到了。

          我們利用當(dāng)前可視區(qū)域的高度大于等于元素距離可視區(qū)域頂部的高度就可以確定,該元素是否已經(jīng)進(jìn)入到了可視范圍:


          小結(jié)

          1. 先收集到頁面中所有的img(也可以用class)。

          2. 獲取到視圖高度,計(jì)算顯示的img,避免重復(fù)賦值src。

          3. 當(dāng)滑動向下滑動鼠標(biāo),會觸發(fā)onScroll事件(防抖),然后觸發(fā)計(jì)算是否賦值src。


          本文完~

          瀏覽 50
          點(diǎn)贊
          評論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報
          評論
          圖片
          表情
          推薦
          點(diǎn)贊
          評論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  www.久久精品视频 | 九一香蕉视频在线观看 | 曰韩一级A片 | 北条麻妃无码在线观看 | 成人A片无码水蜜桃免费网站软件 |