婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av

主頁 > 知識庫 > 利用簡潔的圖片預加載組件提升html5移動頁面的用戶體驗

利用簡潔的圖片預加載組件提升html5移動頁面的用戶體驗

熱門標簽:濟南辦理400電話 漳州人工外呼系統排名 農村住宅地圖標注 跟電銷機器人做同事 威海營銷外呼系統招商 鄭州電銷外呼系統違法嗎 中紳電銷智能機器人 鶴壁手機自動外呼系統怎么安裝 ai電銷機器人連接網關

在做h5移動頁面,相信大家一定碰到過頁面已經打開,但是里面的圖片還未加載出來的情況,這種問題雖然不影響頁面的功能,但是不利于用戶體驗。拋開網速的原因,解決這個問題有多方面的思路:最基本的,要從http請求合并,緩存管理,圖片壓縮等方面做性能優化;另外就是可以對頁面里用到的所有圖片做預加載的處理,當用戶打開頁面的時候不立即顯示第一屏,而是先顯示資源加載效果,等到加載完畢,再來顯示頁面的主內容,這樣就能解決那個問題。雖然這種加載效果占用了用戶的瀏覽時間,但是我們可以把它做的好看有趣一點,所以也不會影響用戶體驗。本文實踐了這種想法,提供一個非常簡潔的圖片預加載組件,實現簡單,功能不弱,在做移動頁面的時候應該對你有參考價值。
效果:

1. 實現思路

html里面的img標簽和css中background-imag等都會觸發瀏覽器去加載相關的圖片,但是如果這個圖片已經加載過了的話,瀏覽器就會直接使用這張已經加載好的圖片,從而能夠瞬間在頁面中渲染出來。通過javascript,創建Image對象,然后把這些對象的src屬性設置成要加載的圖片地址也能觸發瀏覽器加載圖片,利用這一點就能實現圖片預加載的功能:在頁面里首先把那些用到了相關的圖片的元素給藏掉,然后用js去加載圖片,等到所有圖片加載完畢再把藏掉的元素顯示即可。不過這僅僅是一個基本的實現思路,要完成一個功能較健壯的預加載組件,還有以下三個問題:
1)進度問題
由于預加載的同時,還得做一個預加載的效果,這就需要把加載的進度實時通知到外部上下文才行。關于進度有兩個實現方式,第一是已加載的數據大小/總的數據大小,第二是已加載的文件數/總的文件數,在瀏覽器里面,采用第一種方式是不現實的,根本沒有原生的辦法可以做到,所以只能采用第二種。
2)圖片加載失敗的問題
比如說有4張圖片,已經加載了50%,在加載第三張的時候出錯了,該不該將進度反饋成75%呢?答案是:應該。如果不這么處理的話,進度永遠無法到100%,頁面主內容就沒機會顯示了,雖然圖片加載有失敗的情況,但是跟加載器沒有關系,也許圖片本身就不存在呢?也就是說圖片加載失敗不應該影響加載器的功能。
3)圖片加載超時的問題
圖片不能加載太久,否則用戶一直停留在加載效果上看不到主內容,用戶的等待時間不可控制地延長,導致用戶體驗下降,這樣就有悖加載器的初衷了。所以應該給每個圖片設置一個加載的超時時間,如果在所有圖片的超時時間之后,還沒加載完,就應該主動放棄加載,通知外部上下文加載完畢,顯示主內容。
綜合以上這些需求,本文提供的實現是:

JavaScript Code復制內容到剪貼板
  1. (function () {    
  2. function isArray(obj) {    
  3. return Object.prototype.toString.call(obj) === '[object Array]';    
  4. }    
  5. /**   
  6. * @param imgList 要加載的圖片地址列表,['aa/asd.png','aa/xxx.png']   
  7. * @param callback 每成功加載一個圖片之后的回調,并傳入“已加載的圖片總數/要加載的圖片總數”表示進度   
  8. * @param timeout 每個圖片加載的超時時間,默認為5s   
  9. */    
  10. var loader = function (imgList, callback, timeout) {    
  11. timeout = timeout || 5000;    
  12. imgList = isArray(imgList) && imgList || [];    
  13. callback = typeof(callback) === 'function' && callback;    
  14. var total = imgList.length,    
  15. loaded = 0,    
  16. imgages = [],    
  17. _on = function () {    
  18. loaded < total && (++loaded, callback && callback(loaded / total));    
  19. };    
  20. if (!total) {    
  21. return callback && callback(1);    
  22. }    
  23. for (var i = 0; i < total; i++) {    
  24. imgages[i] = new Image();    
  25. imgages[i].onload = imgages[i].onerror = _on;    
  26. imgages[i].src = imgList[i];    
  27. }    
  28. /**   
  29. * 如果timeout * total時間范圍內,仍有圖片未加載出來(判斷條件是loaded < total),通知外部環境所有圖片均已加載   
  30. * 目的是避免用戶等待時間過長   
  31. */    
  32. setTimeout(function () {    
  33. loaded < total && (loaded = total, callback && callback(loaded / total));    
  34. }, timeout * total);    
  35. };    
  36. "function" === typeof define && define.cmd ? define(function () {    
  37. return loader    
  38. }) : window.imgLoader = loader;    
  39. })();   

使用方式(對應代碼中的test.html):

XML/HTML Code復制內容到剪貼板
  1. <script src="../js/imgLoader.js"></script>    
  2. <script>    
  3. imgLoader(['../img/page1.jpg', '../img/page2.jpg', '../img/page3.jpg'], function(percentage){    
  4. console.log(percentage)    
  5. });    
  6. </script>   

運行結果:


2. demo說明
本文開篇給出的效果,對應的頁面是index.html,關于這個效果還有兩個問題需要說明:
1)它用了之前這篇博客Hammer.js+輪播原理實現簡潔的滑屏功能介紹的滑屏思路,并把它的一些邏輯包裝在了swipe.js,對外提供了一個全局變量Swipe,這個模塊有一個init的方法,以便外部通過調用Swipe.init()就能初始化滑屏相關的功能,原來沒有提供這個init方法,在js加載完畢就會初始化滑屏功能,有了這個init方法就可以把滑屏的邏輯延遲到加載完畢的時候去初始化。index.html一共引用了5個js:

XML/HTML Code復制內容到剪貼板
  1. <script src="js/zepto.js"></script>    
  2. <script src="js/transition.js"></script>    
  3. <script src="js/hammer.js"></script>    
  4. <script src="js/imgLoader.js"></script>    
  5. <script src="js/swipe.js"></script>   

其中imgLoader.js就是前面介紹圖片加載器的實現,前三個js都是為最后一個swipe.js服務的,感興趣的可以繼續我的博客利用輪播原理結合hammer.js實現簡潔的滑屏功能了解相關內容。不過滑屏不是本文的重點,不了解swipe.js不會影響理解本文的內容~
2)雖然我在demo中用到了3張比較大的圖片,但是由于在本地環境,加載速度還是非常快,所以一開始的時候,很難看到預加載的效果,最后只能想辦法在每個進度回調之前做一下延遲,這才可以看到前面gif圖片一開始的那個loading效果,實現方式是:

XML/HTML Code復制內容到剪貼板
  1. //模擬加載慢的效果    
  2. var callbacks = [];    
  3. imgLoader(['img/page1.jpg', 'img/page2.jpg', 'img/page3.jpg'], function (percentage) {    
  4. var i = callbacks.length;    
  5. callbacks.push(function(){    
  6. setTimeout(function(){    
  7. var percentT = percentage * 100;    
  8. $('#loader__info').html('Loading ' + (parseInt(percentT)) + '%');    
  9. $('#loader__progress')[0].style.width = percentT + '%';    
  10. if (percentage == 1) {    
  11. setTimeout(function(){    
  12. $('#loader').remove();    
  13. Swipe.init();    
  14. }, 600);    
  15. }    
  16. callbacks[i + 1] && callbacks[i + 1]();    
  17. },600);    
  18. });    
  19. if(percentage == 1) {    
  20. callbacks[0]();    
  21. }    
  22. });   

在真實環境,最好還是不要刻意去加這種延遲,沒必要為了讓用戶看到一個好看有趣的加載效果,就浪費它不必要的等待時間,所以真實環境還是應該用下面的代碼:

XML/HTML Code復制內容到剪貼板
  1. imgLoader(['img/page1.jpg', 'img/page2.jpg', 'img/page3.jpg'], function (percentage) {    
  2. var percentT = percentage * 100;    
  3. $('#loader__info').html('Loading ' + (parseInt(percentT)) + '%');    
  4. $('#loader__progress')[0].style.width = percentT + '%';    
  5. if (percentage == 1) {    
  6. $('#loader').remove();    
  7. Swipe.init();    
  8. }    
  9. });   

3. 注意事項
預加載是一種比較常見的實現效果,但是在使用的時候,有些問題需要注意:
1)什么時候用
頁面大的時候用,一般頁面大小超過3M就該考慮使用;頁面內包含數據量比較大的圖片,在手機端測試能夠明顯看到加載緩慢的時候,可以考慮使用。
2)盡量使用sprite圖片
3)加載效果實現的時候,盡量不用圖片,即使要用也應該用很小的圖片,否則加載效果卡在那就沒有意義了。
4. 總結
本文主要介紹了一個簡單的圖片預加載器,可應用于h5移動頁面的開發當中,在它的思路之下,如果有必要的話,還可以對它進行一些改造,用它來加載其它類型的資源,比如音頻或者視頻文件,畢竟這些類型的DOM對象也都有提供類似Image對象的屬性和回調。與預加載的方式相反的,還有一種圖片懶加載的技術,現在網上已經有比較好用的jquery插件了,不過還是很值的去深入了解下它的思路跟實現要點,等我有時間去研究研究。同時感謝大家一直以來對腳本之家網站的支持!

標簽:甘南 惠州 紅河 文山 萍鄉 蘇州 營口 咸陽

巨人網絡通訊聲明:本文標題《利用簡潔的圖片預加載組件提升html5移動頁面的用戶體驗》,本文關鍵詞  利用,簡潔,的,圖片,預,加載,;如發現本文內容存在版權問題,煩請提供相關信息告之我們,我們將及時溝通與處理。本站內容系統采集于網絡,涉及言論、版權與本站無關。
  • 相關文章
  • 下面列出與本文章《利用簡潔的圖片預加載組件提升html5移動頁面的用戶體驗》相關的同類信息!
  • 本頁收集關于利用簡潔的圖片預加載組件提升html5移動頁面的用戶體驗的相關信息資訊供網民參考!
  • 推薦文章
    婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av
    全国精品久久少妇| 国产三级三级三级精品8ⅰ区| 亚洲欧美日韩在线| 国产精品久久久久永久免费观看| 欧美精品一区二区高清在线观看| 欧洲视频一区二区| 4hu四虎永久在线影院成人| 欧美一区二区日韩| 国产日韩欧美一区二区三区综合| 国产人妖乱国产精品人妖| 国产精品网曝门| 亚洲精品国产视频| 韩国精品免费视频| 粉嫩av亚洲一区二区图片| 不卡一区二区在线| 4438成人网| 亚洲猫色日本管| 麻豆免费看一区二区三区| 韩国理伦片一区二区三区在线播放 | 国产精品乱码人人做人人爱| 亚洲色图在线播放| 久久激情五月婷婷| 欧美三级电影在线观看| 久久久午夜精品| 亚洲国产一区二区三区| 精品一区二区综合| 欧美视频一区二区| 亚洲欧美偷拍卡通变态| 国产高清在线观看免费不卡| 韩国女主播一区| 肉色丝袜一区二区| 日韩精品资源二区在线| 亚洲制服欧美中文字幕中文字幕| 国产不卡视频在线观看| 欧美一区二区三区视频免费 | 欧美国产日韩在线观看| 黑人精品欧美一区二区蜜桃| 日韩午夜电影av| 麻豆精品精品国产自在97香蕉| av电影天堂一区二区在线观看| 精品国产乱码久久久久久夜甘婷婷 | 中文字幕精品三区| 成人黄色一级视频| 亚洲韩国精品一区| 欧美系列亚洲系列| 狠狠色综合播放一区二区| 91久久线看在观草草青青| 最新国产成人在线观看| 色噜噜夜夜夜综合网| 五月激情六月综合| 欧美va亚洲va国产综合| 成人av在线播放网站| 亚洲一区免费观看| 久久久高清一区二区三区| 99在线精品观看| 免费观看91视频大全| 亚洲欧洲成人自拍| 久久久久高清精品| 国产一区二区三区国产| 亚洲一区在线观看免费 | 国内久久婷婷综合| 亚洲国产精品影院| 综合分类小说区另类春色亚洲小说欧美| 欧美性猛片xxxx免费看久爱 | 天天综合天天综合色| 中文字幕一区二区三区不卡在线| 2024国产精品| 3751色影院一区二区三区| 久久久久久久精| 成人av中文字幕| 亚洲精品国久久99热| 粉嫩av一区二区三区| 中文字幕欧美日韩一区| 国产福利精品一区| 日韩一区在线看| 日韩一区二区三| 91精品国产美女浴室洗澡无遮挡| 国产91富婆露脸刺激对白| 国产一区二区网址| 精品一区二区三区免费观看| 亚洲国产欧美另类丝袜| 亚洲一区二区在线免费看| 久久精品欧美一区二区三区麻豆| 欧美裸体一区二区三区| 欧美精品色一区二区三区| 欧美一区二区视频观看视频| 欧美成人一级视频| 久久精品视频一区二区三区| 亚洲人成电影网站色mp4| 午夜视频在线观看一区二区三区| 久久爱www久久做| 91在线一区二区三区| 99re成人精品视频| 99久久国产综合精品色伊| 在线视频亚洲一区| 欧美一区二区三区色| 国产精品美女久久久久久| 亚洲人成精品久久久久| 免费成人av在线播放| 99久久国产综合精品女不卡| 欧美日韩一区三区四区| 中日韩av电影| 欧美精品vⅰdeose4hd| 精品免费视频.| 亚洲国产视频在线| 粉嫩av一区二区三区| 日韩视频一区二区三区在线播放| 视频在线观看一区二区三区| 国产成人高清在线| 久久精品视频免费| 亚洲精品国产高清久久伦理二区| 精品一区二区免费看| 日韩午夜激情视频| 麻豆国产精品777777在线| 欧美日韩国产片| 亚洲观看高清完整版在线观看 | 在线电影院国产精品| 视频一区二区三区中文字幕| 欧美性三三影院| 亚洲精品视频在线观看网站| 不卡视频免费播放| 亚洲国产毛片aaaaa无费看| 99国产欧美另类久久久精品| 亚洲三级理论片| 在线综合亚洲欧美在线视频 | 7777女厕盗摄久久久| 天天亚洲美女在线视频| 欧美剧情片在线观看| 亚洲第一精品在线| 3d动漫精品啪啪一区二区竹菊| 国产一区啦啦啦在线观看| 亚洲三级小视频| 久久午夜国产精品| 3atv在线一区二区三区| 国产suv精品一区二区6| 亚洲午夜电影网| 久久久久成人黄色影片| 欧美日韩成人综合天天影院| 成人综合婷婷国产精品久久蜜臀| 日韩极品在线观看| 亚洲电影在线播放| 亚洲国产精品黑人久久久| 欧美一级免费大片| 在线观看一区不卡| 粉嫩嫩av羞羞动漫久久久| 国产在线一区二区| 久久精品国产99国产精品| 免费观看日韩av| 天天色天天爱天天射综合| 亚洲免费成人av| 亚洲综合在线第一页| 亚洲卡通欧美制服中文| 一区二区三区产品免费精品久久75| 国产欧美精品一区二区三区四区 | 91小视频在线| 91国偷自产一区二区开放时间| 高清在线观看日韩| 91美女片黄在线| 日韩一区二区在线看| 久久综合九色综合欧美98| 国产精品乱人伦中文| 国产精品另类一区| 亚洲综合免费观看高清在线观看| 亚洲国产日日夜夜| 奇米影视7777精品一区二区| 国产成人亚洲精品青草天美| 91亚洲永久精品| 久久久久久麻豆| 亚洲免费观看高清完整版在线观看| 樱花影视一区二区| 久久国产麻豆精品| 欧美日韩国产中文| 亚洲欧洲www| 国产九色精品成人porny| 在线亚洲欧美专区二区| 日韩丝袜情趣美女图片| 亚洲欧美福利一区二区| 国产综合色视频| 欧美tk—视频vk| 国模娜娜一区二区三区| 5858s免费视频成人| 国产精品久久久久9999吃药| 蜜桃av一区二区在线观看| 日本精品一区二区三区高清| 国产人伦精品一区二区| 国产激情视频一区二区三区欧美 | 日韩精品一区二区三区在线观看 | 久久色中文字幕| 日韩成人一区二区| 91精品国产麻豆国产自产在线| 成人看片黄a免费看在线| 欧美精品亚洲一区二区在线播放| 亚洲一区中文日韩| 欧美日韩情趣电影| 青青草97国产精品免费观看| 精品视频全国免费看| 久久精品国产亚洲aⅴ| 日韩三级视频在线看| 日本不卡一区二区三区高清视频| 欧美一区二区精品在线|