å è½½å¯è§åå¾å
å设æä»¬æä¸ä¸ªéåº¦è¾æ ¢ç客æ·ç«¯ï¼å¹¶ä¸å¸æèçå®ä»¬å¨ç§»å¨ç«¯çæµéã
为æ¤ï¼æä»¬å³å®ä¸ç«å³æ¾ç¤ºå¾åï¼èæ¯å°å ¶æ¿æ¢ä¸ºå ä½ç¬¦ï¼å¦ä¸æç¤ºï¼
<img src="placeholder.svg" width="128" height="128" data-src="real.jpg">
å æ¤ï¼æåææå¾åå为 placeholder.svgãå½é¡µé¢æ»å¨å°ç¨æ·å¯ä»¥çå°å¾åä½ç½®æ¶ ââ æä»¬å°±ä¼å° src æ´æ¹ä¸º data-src ç srcï¼ä»èå è½½å¾åã
è¿æ¯å¨ iframe ä¸çä¸ä¸ªç¤ºä¾ï¼
æ»å¨å®å¯ä»¥çå°å¾åæ¯âæéâå è½½çã
è¦æ±ï¼
- å è½½é¡µé¢æ¶ï¼å±å¹ä¸çé£äºå¾ååºè¯¥å¨æ»å¨ä¹åç«å³å è½½ã
- æäºå¾åå¯è½æ¯å¸¸è§å¾åï¼æ²¡æ
data-srcã代ç ä¸åºè¯¥æ¹å¨å®ä»¬ã - 䏿¦å¾å被å è½½ï¼å®å°±ä¸åºè¯¥å¨æ»å¨è¿/åºæ¶è¢«éæ°å è½½ã
P.S. å¦æä½ æè½åï¼å¯ä»¥å建ä¸ä¸ªæ´é«çº§çè§£å³æ¹æ¡ï¼ä»¥âé¢å è½½âå½åä½ç½®ä¸æ¹/ä¹åä¸é¡µçå¾åã
P.P.S. ä» å¤çåç´æ»å¨ï¼ä¸å¤çæ°´å¹³æ»å¨ã
onscroll å¤çç¨åºåºè¯¥æ£æ¥åªäºå¾åæ¯å¯è§çï¼å¹¶æ¾ç¤ºå®ä»¬ã
æä»¬è¿å¸æå¨é¡µé¢å è½½æ¶è¿è¡å®ï¼ä»¥æ£æµå³å°å¯è§çå¾åå¹¶å è½½å®ä»¬ã
该代ç åºè¯¥å¨ææ¡£å è½½å®ææ¶æ§è¡ï¼ä»¥ä¾¿å¯ä»¥è®¿é®ææ¡£å 容ã
æè
å°è¯¥ä»£ç æ¾å¨ <body> åºé¨ï¼
// ...页é¢å
容å¨ä¸é¢...
function isVisible(elem) {
let coords = elem.getBoundingClientRect();
let windowHeight = document.documentElement.clientHeight;
// é¡¶é¨å
ç´ è¾¹ç¼å¯è§åï¼
let topVisible = coords.top > 0 && coords.top < windowHeight;
// åºé¨å
ç´ è¾¹ç¼å¯è§åï¼
let bottomVisible = coords.bottom < windowHeight && coords.bottom > 0;
return topVisible || bottomVisible;
}
showVisible() 彿°ä½¿ç¨éè¿ isVisible() å®ç°çå¯è§æ§æ£æ¥ï¼æ¥å è½½å¯è§å¾åï¼
function showVisible() {
for (let img of document.querySelectorAll('img')) {
let realSrc = img.dataset.src;
if (!realSrc) continue;
if (isVisible(img)) {
img.src = realSrc;
img.dataset.src = '';
}
}
}
showVisible();
window.onscroll = showVisible;
P.S. æ¤è§£å³æ¹æ¡è¿æä¸ä¸ª isVisible çåä½ï¼å¯ä»¥âé¢å è½½âå½åææ¡£æ»å¨ä¸æ¹/䏿¹ 1 页å
çå¾å
