平時項目中使用的所有是jQuery框架,可是對於作webapp來講jQuery太過於龐大,固然你能夠選擇jQuery 2.*針對移動端的版本。javascript
這裏我採用移動端使用率比較多的zepto框架,他跟jquery語法相似,至關於精簡的jQuery把!java
作webapp不得不考慮用戶的網絡狀況跟用戶體驗度,因此傳統的分頁,在webapp上確定是不行的,這裏通常狀況都是作成滾動自動更新,對於圖片方面,固然是lazyload了,可是網上的lazyload Plugin是jQuery的,固然你能夠改寫成Zepto的,這裏咱們本身動手寫一個,其實也挺簡單的,這裏咱們用TypeScript來編寫!jquery
/// <reference path="../typings/zepto/zepto.d.ts" /> (function ($) { $.fn.lazyload = function (ops) { var $w = $(this); var options = <lazyloadOptions>$.extend({filter: "*[data-lazy]", preloadHeight: 50 }, ops); var height =$w.height(); $w.on("scroll", e => { var elements = $(options.filter + "[data-origin]"); var top_end = (<HTMLElement>$w[0]).scrollTop +height+ options.preloadHeight; elements.each((index:number, item: HTMLElement) => { var $item: ZeptoCollection = $(item); var t = Math.floor($item.offset().top); if (t <= top_end) { var origin = $item.attr("data-origin"); $item.removeAttr("data-origin").removeAttr("data-lazy"); switch (item.tagName.toLowerCase()) { case "img": $item.attr({ src: origin, a: origin }); break; default: $item.load(origin); break; } } return true; }); }); $w.trigger("scroll"); }; })(Zepto); interface lazyloadOptions { filter: string;//過濾器 preloadHeight: number;//預加載高度 }
調用就很簡單了:web
<script type="text/javascript"> $(function () { $(".page").lazyload(); }); </script>
這裏沒有作DIV標籤背景圖片的lazyload,由於個人使用場景不一樣,ajax
這裏圖片只要定義成<img src='about:blank' data-lazy="true" data-origin="/Content/images/daoyou/dy1.png" />便可網絡
而後DIV等標籤ajax加載也作成了lazyloadapp
<div data-lazy="true" data-origin="/Test/test">正在加載...</div>框架
便可!webapp
這個是經過F12開發人員工具看的正常狀態下但是區域作下面一行的預加載狀況,處於當前行下面的圖片沒有到達預加載範圍,因此src仍是初始化的值工具
這個是在不可視區域(未加載區域)的DIV,data-origin屬性是要用ajax加載的Url,當前還還沒有加載!
當DIV滾動到加載區域,會自動Ajax請求data-origin屬性的地址,這裏只作了簡單的get請求,若是有POST或者其餘的可自行擴展!
有興趣的能夠測試一下如何!