懶加載

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

 function isVisible($node){
  var $scrollTop = $(window).scrollTop();
  var $windowHeight = $(window).height();
  var $offsetTop = $(node).offset().top;
  var $nodeHeight = $(node).height();
  if(($offsetTop < ($scrollTop + $windowHeight)) && (($offsetTop + $nodeHeight) > $scrollTop)){
    return true;
  };
  return false;
 };

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

我們可以給元素設(shè)置一個自定義屬性來模擬懶加載的情況。
當(dāng)元素出現(xiàn)在視野內(nèi)時,將這個自定義屬性的值改為true;當(dāng)元素消失時,將屬性值改為false。每當(dāng)這個屬性的值由false變?yōu)閠rue時,就打印一次true。
代碼如下:

<script>
        lazyRender()
        $(window).on('scroll',function(){
            if(!(checkShow($('node')))){
                $('node').attr('loaded','false');     //當(dāng)元素從視野中消失時,將loaded值改為false,其中l(wèi)oaded即為自定義屬性
            }else{
                lazyRender()
            };
        });
        function lazyRender(){
            $('node').each(function(){
                if(checkShow($(this)) && !isLoaded($(this))){
                    loadNode($(this));
                };
            });
        };
        function checkShow($node){
            var $scrollTop = $(window).scrollTop();
            var $windowHeight = $(window).height();
            var $offsetTop = $node.offset().top;
            var $nodeHeight = $node.height();
            if(($offsetTop < ($scrollTop + $windowHeight)) && (($offsetTop + $nodeHeight) > $scrollTop)){
               return true;
            };
            return false;
        };
        function isLoaded($node){
            return ($node.attr('loaded') === ('true'));
        };
        function loadNode($node){
            $node.attr('loaded','true');
            console.log('true')
        };     //當(dāng)自定義屬性loaded變?yōu)閠rue時,即為元素出現(xiàn),此時打印true
</script>

3、當(dāng)窗口滾動時,判斷一個元素是不是出現(xiàn)在窗口可視范圍。在元素第一次出現(xiàn)時在控制臺打印 true,以后再次出現(xiàn)不做任何處理。用代碼實現(xiàn)。

基本思路和上一題類似。
區(qū)別在于當(dāng)元素第一次出現(xiàn)在視野內(nèi)時,改變自定義屬性的值;但當(dāng)元素消失時,不再改變自定義屬性值。這樣后期該元素再出現(xiàn)或者消失,這個自定義屬性都不會再改變,那么后臺也不會再執(zhí)行任何的命令。
代碼如下:

<script>
        lazyRender()
        $(window).on('scroll',function(){
            lazyRender()
        });
        function lazyRender(){
            $('node').each(function(){
                if(checkShow($(this)) && !isLoaded($(this))){
                    loadNode($(this));
                };
            });
        };
        function checkShow($node){
            var $scrollTop = $(window).scrollTop();
            var $windowHeight = $(window).height();
            var $offsetTop = $node.offset().top;
            var $nodeHeight = $node.height();
            if(($offsetTop < ($scrollTop + $windowHeight)) && (($offsetTop + $nodeHeight) > $scrollTop)){
               return true;
            };
            return false;
        };
        function isLoaded($node){
            return ($node.attr('loaded') === ('true'));
        };
        function loadNode($node){
            $node.attr('loaded','true');
            console.log('true')
        };     //在元素第一次出現(xiàn)時打印true
</script>

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

  1. 在原始的html代碼中,我們把所有img標(biāo)簽所對應(yīng)的真實地址放入一個自定義屬性中,如data-src;
  2. 當(dāng)頁面滾動時,檢查頁面上所有的img標(biāo)簽,判斷哪些標(biāo)簽出現(xiàn)在了在用戶的視野中。具體的判斷方法,可以根據(jù)窗口滾動的高度、窗口高度、元素頂部距離頁面頂部的高度和元素自身高度四者間的大小關(guān)系來判斷;
  3. 對于出現(xiàn)在用戶視野中的圖片,進(jìn)一步判斷它是否已經(jīng)被加載過。如果img的src屬性值等于data-src的值,則表示該圖片已經(jīng)被加載過,反之則表示該圖片沒有被加載過;
  4. 如果該圖片還沒有被加載過,那么就加載它。加載的方法就是將data-src的值賦給src即可。

5、實現(xiàn)視頻中的圖片懶加載效果。

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

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

  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn),斷路器,智...
    卡卡羅2017閱讀 136,569評論 19 139
  • 1、懶加載 1.什么是懶加載? 懶加載也就是延遲加載。當(dāng)訪問一個頁面的時候,先把img元素或是其他元素的背景圖片路...
    xiaolizhenzhen閱讀 70,627評論 18 160
  • 如何判斷一個元素是否出現(xiàn)在窗口可視范圍(瀏覽器的上邊緣和下邊緣之間,肉眼可視)。寫一個函數(shù) isVisible實現(xiàn)...
    _Dot912閱讀 1,777評論 10 8
  • 題目1:如何判斷一個元素是否出現(xiàn)在窗口可視范圍(瀏覽器的上邊緣和下邊緣之間,肉眼可視)。寫一個函數(shù) isVisib...
    湖衣閱讀 251評論 0 0
  • 傳統(tǒng)意義上的送女票禮物應(yīng)該是花啊、毛絨玩具啊、首飾啊、衣服啊之類的吧,可少爺不這樣,也不知道蠶蠶是個純粹的吃貨還是...
    躲在角落的cc閱讀 244評論 0 0

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