歡迎點選: 個人官網部落格
預加載(進度)
比如一些公衆号h5宣傳頁面,受網速影響,頁面加載素材的時間比較長,頁面會出現短時間的錯亂或者閃屏; 進入頁面的時候把圖檔全加載一遍,就不會出現圖檔加載慢顯示慢的情況
效果圖:
<script>
//頁面所有img标簽的集合
let img = document.getElementsByTagName("img");
function yuLoad() {
let index = 0
for (let i = 0; i < img.length; i++) {
let src = img[0].getAttribute('src')
let oImg = new Image()
oImg.src = src
oImg.onload = () => {
index++
if (index == img.length) {
setTimeout(begin, 500);
function begin() {
//全部加載完後執行
}
}
//加載進度
console.log(Math.floor(index / img.length * 100 )+ '%')
}
}
}
window.addEventListener('load', (e) => {
let timing = performance.getEntriesByType('navigation')[0]
let tti = timing.domInteractive - timing.fetchStart
console.log(tti) //加載資源所花的時間
})
document.onreadystatechange = function () {
if (document.readyState == 'complete') {
console.log('ok') //加載資源完畢
// isload=false
}
}
</script>
最後預加載如果使用插件的話可以試試 pace.js,preloadjs
懶加載(進度)
一張圖檔就是一個img标簽,浏覽器是否發起請求圖檔是根據img的src屬性,是以在圖檔沒有進入可視區域時,先不給img的src指派,真正路徑存儲在data-src屬性裡面,這樣浏覽器就不會發送請求了,等到圖檔進入可視區域再取出data-src屬性裡面的值給src指派,這裡可以統一用一張loading.png作為src預設值告訴使用者正在加載中。
效果圖:(随着頁面的滾動按需加載圖檔)
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
<style>
img {
width: 300px;
height: 300px;
}
</style>
</head>
<body>
<img src="./img/load.gif" data-src="./img/0.jpg" alt="">
<img src="./img/load.gif" data-src="./img/0.jpg" alt="">
<img src="./img/load.gif" data-src="./img/0.jpg" alt="">
<img src="./img/load.gif" data-src="./img/0.jpg" alt="">
<img src="./img/load.gif" data-src="./img/0.jpg" alt="">
<img src="./img/load.gif" data-src="./img/0.jpg" alt="">
<img src="./img/load.gif" data-src="./img/0.jpg" alt="">
<img src="./img/load.gif" data-src="./img/0.jpg" alt="">
<img src="./img/load.gif" data-src="./img/0.jpg" alt="">
<img src="./img/load.gif" data-src="./img/0.jpg" alt="">
<img src="./img/load.gif" data-src="./img/0.jpg" alt="">
<img src="./img/load.gif" data-src="./img/0.jpg" alt="">
<img src="./img/load.gif" data-src="./img/0.jpg" alt="">
<img src="./img/load.gif" data-src="./img/0.jpg" alt="">
<img src="./img/load.gif" data-src="./img/0.jpg" alt="">
<img src="./img/load.gif" data-src="./img/0.jpg" alt="">
<img src="./img/load.gif" data-src="./img/0.jpg" alt="">
<img src="./img/load.gif" data-src="./img/0.jpg" alt="">
<img src="./img/load.gif" data-src="./img/0.jpg" alt="">
<img src="./img/load.gif" data-src="./img/0.jpg" alt="">
<img src="./img/load.gif" data-src="./img/0.jpg" alt="">
<img src="./img/load.gif" data-src="./img/0.jpg" alt="">
</body>
<script>
let img = document.getElementsByTagName("img");
let count = img.length;
lazyload(); //首次加載别忘了顯示圖檔
window.addEventListener('scroll', ()=>{//頁面滾動事件
setTimeout(()=>{
lazyload()
},500)//節個流
});
function lazyload() {
let viewHeight = document.documentElement.clientHeight || document.body.clientHeight; //視口高度
let scrollTop = document.documentElement.scrollTop || document.body.scrollTop; //滾動條卷去的高度
let imgItem
for (let index = 0; index < count; index++) {
imgItem = img[index]
if (imgItem.offsetTop < viewHeight + scrollTop) {
if (imgItem.getAttribute('data-src')) {
imgItem.src = imgItem.getAttribute('data-src')
imgItem.removeAttribute('data-src')
}
}
}
}
</script>
</html>
最後懶加載如果使用插件的話可以試試 echo.js,lazy.js