在實際的項目開發中,咱們一般會碰見這樣的場景:一個頁面有不少圖片,而首屏出現的圖片大概就一兩張,那麼咱們還要一次性把全部圖片都加載出來嗎?顯然這是愚蠢的,不只影響頁面渲染速度,還浪費帶寬。這也就是們一般所說的首屏加載,技術上現實其中要用的技術就是圖片懶加載--到可視區域再加載。前端
將頁面裏全部img屬性src屬性用data-xx代替,當頁面滾動直至此圖片出如今可視區域時,用js取到該圖片的data-xx的值賦給src。jquery
頁可見區域寬: 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;
下載地址:https://github.com/helijun/helijun/blob/master/plugin/lazyLoad/jquery.lazyload.jsgit
<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,而且最好是給予初始高寬佔位,以避免影響佈局,固然這裏爲了演示我是寫死的640x480,若是是響應式頁面,高寬須要動態計算。github
dome演示地址:http://h5.sztoda.cn/test/testLazyLoaddom
在前面「前端知識的一些總結」的博文中,介紹了一款很是簡單實用輕量級的圖片延時加載插件echo.js,若是你的項目中沒有依賴jquery,那麼這將是個不錯的選擇,50行代碼,壓縮後才1k。固然你徹底能夠集成到本身項目中去!ide
下載地址: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分鐘優化下~優化