小說APP原始碼的圖片載入方式,懶載入和預載入的實現
圖片懶載入
<!DOCTYPE html><html lang="en"> <head> <meta charset="UTF-8" /> <meta name="viewport" content="width=device-width, initial-scale=1.0" /> <title>圖片懶載入</title> <style> * { padding: 0; margin: 0; } img { width: 100%; height: 183px; } </style> </head> <body> <div class="img-container"> <img src="./images/loading.gif" alt="" data-src="./images/1.jpg" class="lazyload" /> </div> <div class="img-container"> <img src="./images/loading.gif" alt="" data-src="./images/2.jpg" class="lazyload" /> </div> <div class="img-container"> <img src="./images/loading.gif" alt="" data-src="./images/3.jpg" class="lazyload" /> </div> <div class="img-container"> <img src="./images/loading.gif" alt="" data-src="./images/4.jpg" class="lazyload" /> </div> <div class="img-container"> <img src="./images/loading.gif" alt="" data-src="./images/5.jpg" class="lazyload" /> </div> <script> // 圖片要設定高度 const imgs = [...document.querySelectorAll(".lazyload")]; lazyload(); window.addEventListener('scroll', lazyload, false); function lazyload() { for (let i = 0; i < imgs.length; i++) { const $img = imgs[i]; if (isInVisibleArea($img)) { $img.src = $img.dataset.src; imgs.splice(i, 1); i--; } } } // DOM 元素是否在可視區域內 function isInVisibleArea($el) { const rect = $el.getBoundingClientRect(); // console.log(rect); return ( rect.bottom > 0 && rect.top < window.innerHeight && rect.right > 0 && rect.left < window.innerWidth ); } </script> </body></html>
window.addEventListener("scroll", debounce(lazyload), false);// 不適用// window.addEventListener('scroll', throttle(lazyload), false);// 防抖 debounce// 在某個時間期限內,事件處理函式只執行一次function debounce(fn, miliseconds = 250, context) { let timer = null; return function (...args) { const self = context || this; if (timer) { clearTimeout(timer); } timer = setTimeout(() => { fn.apply(self, args); timer = null; }, miliseconds); };}// 節流 throttle// 事件處理函式執行一次後,在某個時間期限內不再工作function throttle(fn, miliseconds = 250, context) { let lastEventTimestamp = null; return function (...args) { const self = context || this; const now = Date.now(); if (!lastEventTimestamp || now - lastEventTimestamp >= miliseconds) { lastEventTimestamp = now; fn.apply(self, args); } };}
圖片預載入
<!DOCTYPE html><html lang="en"> <head> <meta charset="UTF-8" /> <meta name="viewport" content="width=device-width, initial-scale=1.0" /> <title>圖片預載入</title> <style> .img-container { display: flex; align-items: center; height: 100vh; background-color: rgba(0, 0, 0, 0.5); } img { width: 100%; } * { margin: 0; padding: 0; } </style> </head> <body> <div class="img-container"> <img src="./images/1.jpg" alt="圖片" id="img" /> </div> <script> const imgs = [ './images/2.jpg', './images/3.jpg', './images/4.jpg', './images/5.jpg' ]; let i = 0; const $img = document.getElementById('img'); // 頁面一開始呼叫preload載入陣列的第一個元素 preload(imgs[i]) .then(data => {}) .catch(() => {}); // 點選切換 $img.addEventListener( 'click', () => { // 當索引小於陣列length if (i < imgs.length) { // 將陣列元素的src賦值給頁面元素 $img.src = imgs[i]; // i+1 下次點選變為陣列的第二個元素 依次遞增 i++; // 當索引小於陣列length if (i < imgs.length) { // 預載入下一個圖片 preload(imgs[i]); } } else { // 當 索引和 陣列length相同 則陣列內沒元素了 console.log('已經是最後一張了!'); } }, false ); // 預載入 function preload(src) { // Promise進行包裝 return new Promise((resolve, reject) => { // 建立一個新的圖片標籤 const image = new Image(); // 圖片載入完成呼叫成功狀態 image.addEventListener('load', () => resolve(image), false); // 圖片載入失敗呼叫失敗狀態 image.addEventListener('error', () => reject, false); // 將傳進來的src賦值給新的圖片 image.src = src; }); } </script> </body></html>
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69996194/viewspace-2845208/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 圖片預載入和懶載入
- 實現圖片懶載入的三種方式
- 圖片懶載入實現
- 圖片預載入和懶載入(附上一個小demo瀑布流)
- 滾動載入圖片(懶載入)實現原理
- 圖片預載入,圖片懶載入,和jsonp中的一個疑問JSON
- 懶載入和預載入
- 圖片懶載入js實現JS
- 頁面圖片預載入與懶載入策略
- 圖片懶載入
- ECMAScript擴充套件 -12 【圖片的預載入與懶載入】套件
- 如何實現圖片預載入和載入進度條
- 手把手實現圖片懶載入+封裝vue懶載入元件封裝Vue元件
- [譯] 原生實現圖片懶載入
- React如何實現圖片懶載入React
- 實現圖片懶載入(throttle, debounce)
- 效能更優越的小程式圖片懶載入方式
- 微信小程式--實現圖片懶載入(lazyload)微信小程式
- 圖片懶載入原理
- 圖片懶載入(IntersectionObserver)Server
- 30行Javascript程式碼實現圖片懶載入JavaScript
- 小程式之圖片瀑布流(最全實現方式,額外加送懶載入)
- 單張圖片懶載入
- 圖片懶載入踩坑
- 圖片懶載入大白話
- Js圖片懶載入(lazyload)JS
- 預載入圖片
- TestFlight下載App,載入圖片失效。Xcode安裝App,圖片載入正常。APPXCode
- 1道面試題---懶載入和預載入面試題
- 舉例說明圖片懶載入的方案有哪些?
- Vue實現一個圖片懶載入外掛Vue
- 前端效能優化 --- 懶載入&預載入前端優化
- Vue中圖片的載入方式Vue
- [譯] React 16.6 懶載入(與預載入)元件React元件
- 一起來實現圖片滾動懶載入
- 小程式記憶體問題–圖片懶載入記憶體
- vue圖片懶載入lazy-loadVue
- 前端優化之圖片懶載入前端優化