Commit d1d35948 by liumengfei

优化图片列表加载图片延迟

parent 65ab988b
...@@ -238,29 +238,21 @@ $_helper = $block->getData('outputHelper'); ...@@ -238,29 +238,21 @@ $_helper = $block->getData('outputHelper');
}) })
</script> </script>
<script> <script>
// 获取所有的图片标签
const imgs = document.getElementsByTagName("img"); const imgs = document.getElementsByTagName("img");
// 获取可视区域的高度
const viewHeight = const viewHeight =
window.innerHeight || document.documentElement.clientHeight; window.innerHeight || document.documentElement.clientHeight;
// num用于统计当前显示到了哪一张图片,避免每次都从第一张图片开始检查是否露出
let num = 0; let num = 0;
function lazyload() { function lazyload() {
for (let i = num; i < imgs.length; i++) { for (let i = num; i < imgs.length; i++) {
// 用可视区域高度减去元素顶部距离可视区域顶部的高度
let distance = viewHeight - imgs[i].getBoundingClientRect().top; let distance = viewHeight - imgs[i].getBoundingClientRect().top;
// 如果可视区域高度大于等于元素顶部距离可视区域顶部的高度,说明元素露出
if (distance >= 0) { if (distance >= 0) {
// 给元素写入真实的src,展示图片
imgs[i].src = imgs[i].getAttribute("data-src"); imgs[i].src = imgs[i].getAttribute("data-src");
// 前i张图片已经加载完毕,下次从第i+1张开始检查是否露出
num = i + 1; num = i + 1;
} }
} }
} }
// 防抖函数 function debounce(fn, delay = 100) {
function debounce(fn, delay = 500) {
let timer = null; let timer = null;
return function (...args) { return function (...args) {
if (timer) clearTimeout(timer); if (timer) clearTimeout(timer);
...@@ -269,9 +261,7 @@ $_helper = $block->getData('outputHelper'); ...@@ -269,9 +261,7 @@ $_helper = $block->getData('outputHelper');
}, delay); }, delay);
}; };
} }
// 是的页面初始化是加载首屏图片
window.onload = lazyload; window.onload = lazyload;
// 监听Scroll事件,为了防止频繁调用,使用防抖函数优化一下 window.addEventListener("scroll", debounce(lazyload, 100), false);
window.addEventListener("scroll", debounce(lazyload, 600), false);
</script> </script>
<?php endif; ?> <?php endif; ?>
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment