• 歡迎訪問奇跡の海網站,本站不上傳任何資源,所有資源均來自于網絡,歡迎加入奇跡の海~!奇跡の海-WordPress QQ群
  • 本站下載資源為網絡上收集整理而來,并且以計算機技術研究交流為目的,版權歸原作者所有,僅供大家參考,學習,不存在任何商業目的與商業用途.
  • 本站系統鏡像均來自于官方原版,ed2k可視為P2P下載鏈接。所有操作系統默認均為試用版,如有正版密鑰可以有效激活,本站不提供任何激活和相關服務。

前端實現圖片懶加載(lazyload)的兩種方式

服務器 奇跡の海 2年前 (2018-02-01) 746次瀏覽 已收錄 0個評論 掃描二維碼

在實際的項目開發中,我們通常會遇見這樣的場景:一個頁面有很多圖片,而首屏出現的圖片大概就一兩張,那么我們還要一次性把所有圖片都加載出來嗎?顯然這是愚蠢的,不僅影響頁面渲染速度,還浪費帶寬。這也就是們通常所說的首屏加載,技術上現實其中要用的技術就是圖片懶加載–到可視區域再加載

思路:

將頁面里所有img屬性src屬性用data-xx代替,當頁面滾動直至此圖片出現在可視區域時,用js取到該圖片的data-xx的值賦給src。

 

關于各種寬高:

前端實現圖片懶加載(lazyload)的兩種方式
頁可見區域寬: document.body.clientWidth;
網頁可見區域高: document.body.clientHeight;
網頁可見區域寬: document.body.offsetWidth (包括邊線的寬);
網頁可見區域高: document.body.offsetHeight (包括邊線的寬);
網頁正文全文寬: document.body.scrollWidth;
網頁正文全文高: document.body.scrollHeight;
網頁被卷去的高: document.body.scrollTop;
網頁被卷去的左: document.body.scrollLeft;
網頁正文部分上: window.screenTop;
網頁正文部分左: window.screenLeft;
屏幕分辨率的高: window.screen.height;
屏幕分辨率的寬: window.screen.width;
屏幕可用工作區高度: window.screen.availHeight;

示例:

jqueryLazyload方式

下載地址:https://github.com/helijun/helijun/blob/master/plugin/lazyLoad/jquery.lazyload.js

<section class="module-section" id="container">
     <img class="lazy-load" data-original="../static/img/loveLetter/teacher/teacher1.jpg" width="640" height="480" alt="測試懶加載圖片"/>
</section>

 

require.config({
    baseUrl : "/static",
    paths: {
        jquery:'component/jquery/jquery-3.1.0.min'
        jqueryLazyload: 'component/lazyLoad/jquery.lazyload',//圖片懶加載
    },
    shim: {
        jqueryLazyload: {
            deps: ['jquery'],
            exports: '$'
        }
    }
});
require(
    [
        'jquery',
        'jqueryLazyload'
    ], 
    function($){
        $(document).ready(function() {     
            $("img.lazy-load").lazyload({ 
          effect : "fadeIn", //漸現,show(直接顯示),fadeIn(淡入),slideDown(下拉)
          threshold : 180, //預加載,在圖片距離屏幕180px時提前載入
          event: 'click',  // 事件觸發時才加載,click(點擊),mouseover(鼠標劃過),sporty(運動的),默認為scroll(滑動)
          container: $("#container"), // 指定對某容器中的圖片實現效果
          failure_limit:2 //加載2張可見區域外的圖片,lazyload默認在找到第一張不在可見區域里的圖片時則不再繼續加載,但當HTML容器混亂的時候可能出現可見區域內圖片并沒加載出來的情況
        }); 
      });
  });

為了代碼可讀性,屬性值我都寫好了注釋。值得注意的是預制圖片屬性為data-original,并且最好是給予初始高寬占位,以免影響布局,當然這里為了演示我是寫死的640×480,如果是響應式頁面,高寬需要動態計算。

dome演示地址:http://h5.sztoda.cn/test/testLazyLoad

echo.js方式

在前面“前端知識的一些總結”的博文中,介紹了一款非常簡單實用輕量級的圖片延時加載插件echo.js,如果你的項目中沒有依賴jquery,那么這將是個不錯的選擇,50行代碼,壓縮后才1k。當然你完全可以集成到自己項目中去!

下載地址:https://github.com/helijun/helijun/tree/master/plugin/echo

 

<style>
  .demo img { 
    width: 736px; 
    height: 490px; 
    background: url(images/loading.gif) 50% no-repeat;}
</style>
<div class="demo">
    <img class="lazy" src="images/blank.gif" data-echo="images/big-1.jpg">
</div>
<script src="js/echo.min.js"></script>

<script>

Echo.init({
    offset: 0,//離可視區域多少像素的圖片可以被加載
   throttle: 0 //圖片延時多少毫秒加載
}); 

</script>

說明:blank.gif是一張背景圖片,包含在插件里了。圖片的寬高必須設定,當然,可以使用外部樣式對多張圖片統一控制大小。data-echo指向的是真正的圖片地址。

總結:

兩者都非常簡單,實現思路是一樣的,只是jquerylazyload多幾個屬性。其實常用的echo就足夠了,并且完全可以集成到自己項目中的公共js中,圖片懶加載是相當常見且簡單實用的功能,如果你的項目中還是傻瓜式的一次性全部加載,那么請花20分鐘優化下~


版權聲明:本站所有文章和資源使用CC BY-NC-SA 4.0協議授權發布 , 轉載應當以相同方式注明文章來自“SeaOMC.COM->前端實現圖片懶加載(lazyload)的兩種方式!在下邊可以分享本文哦!
喜歡 (0)
[]
分享 (0)
奇跡の海
關于作者:
一個WordPress菜鳥!
發表我的評論
取消評論

表情 貼圖 加粗 刪除線 居中 斜體 簽到

Hi,您需要填寫昵稱和郵箱!

  • 昵稱 (必填)
  • 郵箱 (必填)
  • 網址
中国福利彩票36选7开奖结果