由於國內的電信網絡性價比的限制,和手機處理能力的差異,在設計一個無線應用的時候,
為用戶節省流量是一個非常重要的考慮因素。可以說每一個字節都應該為客戶端節省。
節約流量可以從以下幾個方面關注:
一、使用緩存 比如 利用瀏覽器本地存儲 前面已經討論過
二、延遲加載代碼 (觸底檢測,通過接口獲取數據)
三、資源的延遲加載,圖片出現在可視區域再加載,(不考慮自動播放的情況下)音頻視頻按用戶點擊加載。
今天簡單說一下圖片延遲加載的實現方式。
例子基於jQuery 和 jQuery mobile
原理:用戶滑動屏幕,屏幕滾動結束(用jQuery 提供的 window scrollstop 事件合適 ) 檢測出現在viewport中的圖片。
替換圖片的 真正 src 屬性即可。
技巧:滾動結束之后不要立即檢測加載,設置一秒延時,也許用戶會立即開始下一次滾屏,基於現在的網絡環境,1秒的延時可以說明用戶真正想查看這些內容。用微信的朋友可以仔細體驗一下這一點。
由於有時鍾的控制,當用戶頻繁快速翻動屏幕,不會發大量請求。
主要代碼:
var refreshTimer = null,
mebook = mebook || {};
/*
*滾動結束 屏幕靜止一秒后檢測哪些圖片出現在viewport中
*和PC端不同 由於無線速度限制 和手機運算能力的差異 1秒鍾的延遲對手機端的用戶來說可以忍受
*/
$(window).on('scrollstop', function () {
if (refreshTimer) {
clearTimeout(refreshTimer);
refreshTimer = null;
}
refreshTimer = setTimeout(refreshAll, 1e3);
});
$.belowthefold = function (element) {
var fold = $(window).height() + $(window).scrollTop();
return fold <= $(element).offset().top;
};
$.abovethetop = function (element) {
var top = $(window).scrollTop();
return top >= $(element).offset().top + $(element).height();
};
/*
*判斷元素是否出現在viewport中 依賴於上兩個擴展方法
*/
$.inViewport = function (element) {
return !$.belowthefold(element) && !$.abovethetop(element)
};
mebook.getInViewportList = function () {
var list = $('#bookList li'),
ret = [];
list.each(function (i) {
var li = list.eq(i);
if ($.inViewport(li)) {
mebook.loadImg(li);
}
});
};
mebook.loadImg = function (li) {
if (li.find('img[_src]').length) {
var img = li.find('img[_src]'),
src = img.attr('_src');
img.attr('src', src).load(function () {
img.removeAttr('_src');
});
}
};
手機掃描二維碼:

