任務(wù)29 懶加載和回到頂部

1.如何判斷一個(gè)元素是否出現(xiàn)在窗口可視范圍(瀏覽器的上邊緣和下邊緣之間,肉眼可視)。寫(xiě)一個(gè)函數(shù) isVisible實(shí)現(xiàn)

  • 首先,要知道三個(gè)高度之間的關(guān)系,
    窗口的高度可以通過(guò)$(window).height()獲得,
    窗口滾動(dòng)的高度可以通過(guò)$(window).scrollTop()獲得,
    以及目標(biāo)元素距離窗口頂部的高度距離,可以通過(guò)目標(biāo)元素的$node.offset().top獲得,
    當(dāng)元素距離頂部的高度<窗口的高度+滾動(dòng)的高度,它是可見(jiàn)的,反之,則不可見(jiàn)。
    function isVisible($node){
    var offset=$node.offset().top;
    var scrollTop=$(window).scrollTop();
    winH=$(window).height();
    if(offset>scrollTop+winH){
    alert('不在可視范圍內(nèi)')
    }else{
    alert('在可視范圍內(nèi)')
    }
    }

2.當(dāng)窗口滾動(dòng)時(shí),判斷一個(gè)元素是不是出現(xiàn)在窗口可視范圍。每次出現(xiàn)都在控制臺(tái)打印 true 。用代碼實(shí)現(xiàn)

  $(window).on('scroll',function(){
      if(isVisible($node)){
            console.log('true')
          }
   })

    function isVisible($node){
        var offset=$node.offset().top;
        var scrollTop=$(window).scrollTop();
              winH=$(window).height();
        if(offset<scrollTop+winH){
            return true
        }else{
            return false
        }
    }

3. 當(dāng)窗口滾動(dòng)時(shí),判斷一個(gè)元素是不是出現(xiàn)在窗口可視范圍。在元素第一次出現(xiàn)時(shí)在控制臺(tái)打印 true,以后再次出現(xiàn)不做任何處理。

  • 設(shè)置延遲函數(shù)延遲執(zhí)行,并設(shè)置標(biāo)志位,判斷是否滾動(dòng),若在幾秒內(nèi)一直在滾動(dòng),就不執(zhí)行,清處定時(shí)器的,反之,則不執(zhí)行清除定時(shí)器
    var clock;
    $(window).on('scroll',function(){
    if(clock){
    clearTimeout(clock)
    }
    var clock=setTimeout(function(){
    if(isVisible($node)&&!isLoaded($node)){
    console.log('true')
    }
    },500)
    })

      function isVisible($node){
          var offset    =    $node.offset().top;
          var   scrollTop=$(window).scrollTop();
                  winH      =   $(window).height();
          if(offset<scrollTop+winH){
              return true
          }else{
              return false
          }
      }
    
      function isLoaded($node){
          if(!!$node.data('src')){
              return true;
          }else{
              $node.data('src',true);
              return false;
          }
      }
    

4.圖片懶加載的原理是什么?

  • 一般來(lái)說(shuō)一個(gè)網(wǎng)頁(yè)上會(huì)有幾百個(gè)張圖片,一張大圖要100K以上,如果一次性同時(shí)加載網(wǎng)頁(yè),向服務(wù)器發(fā)送請(qǐng)求,數(shù)據(jù)超過(guò)10M,這直接會(huì)導(dǎo)致服務(wù)器忙不過(guò)來(lái),因?yàn)閔ttp協(xié)議是只要客戶端發(fā)送請(qǐng)求-服務(wù)器就會(huì)響應(yīng),頁(yè)面加載卡死,所以為了避免這種情況和性能優(yōu)化,才出現(xiàn)了懶加載。
  • 懶加載的原理是將不在我們?yōu)g覽器的可視窗口的圖片不做加載,等到用戶滾動(dòng)到這些不在可視區(qū)域的圖片時(shí),再去加載它,這會(huì)大大優(yōu)化瀏覽器的性能和用戶體驗(yàn)
  • 懶加載的實(shí)現(xiàn)方法:在頁(yè)面載入時(shí),將頁(yè)面中img標(biāo)簽的src指向同一張小圖片或白圖,這是為了避免某些瀏覽器當(dāng)加載不出來(lái)圖片時(shí)會(huì)出現(xiàn)X的丑陋情況,這樣對(duì)于服務(wù)器來(lái)說(shuō)只發(fā)送請(qǐng)求一次,在把真正的url地址放在一個(gè)自定義的data-src屬性里,然后在獲取頁(yè)面的中的img標(biāo)簽,遍歷img標(biāo)簽,并判斷它的位置是否出現(xiàn)在窗口的可視區(qū)域內(nèi),如果出現(xiàn)在可視區(qū)域內(nèi)那就把真實(shí)的url地址賦給src,讓對(duì)應(yīng)的img圖片顯示出現(xiàn),同時(shí)我們還可以對(duì)已經(jīng)加載過(guò)的圖片img標(biāo)簽設(shè)置一個(gè)為 isLoaded 的屬性,設(shè)置為true,這樣在下次執(zhí)行懶加載的時(shí)候就會(huì)判斷是否已經(jīng)加載過(guò),這樣會(huì)有效的過(guò)濾出已加載的圖片,會(huì)大大的優(yōu)化頁(yè)面的加載速度和性能節(jié)省。

代碼題

1.代碼1
2.代碼2
3.代碼3
本地測(cè)試成功
4.原生JS的回到頂部效果
這是最近學(xué)習(xí)到了,比jquery感覺(jué)效果更好一點(diǎn),加入定時(shí)器有了平滑的過(guò)渡到頂部,不會(huì)顯得太突然。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 1.如何判斷一個(gè)元素是否出現(xiàn)在窗口可視范圍(瀏覽器的上邊緣和下邊緣之間,肉眼可視)。寫(xiě)一個(gè)函數(shù) isVisible...
    Rising_suns閱讀 348評(píng)論 0 0
  • 1. 如何判斷一個(gè)元素是否出現(xiàn)在窗口可視范圍(瀏覽器的上邊緣和下邊緣之間,肉眼可視)。寫(xiě)一個(gè)函數(shù) isVisibl...
    JunVincetHuo閱讀 300評(píng)論 0 0
  • 如何判斷一個(gè)元素是否出現(xiàn)在窗口可視范圍(瀏覽器的上邊緣和下邊緣之間,肉眼可視)。寫(xiě)一個(gè)函數(shù) isVisible實(shí)現(xiàn)...
    coolheadedY閱讀 465評(píng)論 0 0
  • 如何判斷一個(gè)元素是否出現(xiàn)在窗口可視范圍(瀏覽器的上邊緣和下邊緣之間,肉眼可視)。寫(xiě)一個(gè)函數(shù) isVisible實(shí)現(xiàn)...
    Nicklzy閱讀 593評(píng)論 0 50
  • 1、如何判斷一個(gè)元素是否出現(xiàn)在窗口可視范圍(瀏覽器的上邊緣和下邊緣之間,肉眼可視)。寫(xiě)一個(gè)函數(shù) isVisible...
    dengpan閱讀 291評(píng)論 0 0

友情鏈接更多精彩內(nèi)容