帝国论坛帝国网站管理系统交流区帝国CMS 7.5与8.0专版[求助]页面图片多,如何实现按需加载? 【本版专题贴子】  
 2/11    |‹ ‹‹ 1 2 3 4 5 6 7 8 9 10 ›› ›|
主题:[求助]页面图片多,如何实现按需加载? [加入收藏夹]   

rere
用户头衔:举人

精华贴   :0
发贴数   :197
经验值   :1343
注册时间:2011-09-02
信息 搜索 好友 发送悄悄话 免费开源-EBMA系统:更安全的MYSQL管理和备份系统】   [第 11 楼]

感谢楼上各位!多谢!!!!!!!!!!!!




2023-11-15 15:55:26 已设置保密 顶部 回复 引用 报告 编辑 删除

rere
用户头衔:举人

精华贴   :0
发贴数   :197
经验值   :1343
注册时间:2011-09-02
信息 搜索 好友 发送悄悄话 精益求精-帝国网站管理系统7.5正式版开源发布】   [第 12 楼]

这段可以哦,放在这里备用。




<script>
// 获取页面可视区域的高度
const visibleHeight = window.innerHeight;
// 获取页面上所有图片的元素
const imgs = document.querySelectorAll("img");
// 为每个图片元素添加 data-src 属性
for (const img of imgs) {
img.setAttribute("data-src", img.src);
img.src = "data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACH5BAEAAAAALAAAAAABAAEAAAIBRAA7";
}
// 监听滚动事件
window.addEventListener("scroll", () => {
// 遍历所有图片元素
for (const img of imgs) {
  // 获取图片元素的顶部位置
  const top = img.getBoundingClientRect().top;
  // 如果图片元素的顶部位置距离可视区域顶部距离小于阈值
  if (top <= visibleHeight - threshold) {
   // 延迟 0.5 秒后,将图片 src 属性设置为 data-src 属性的值
   setTimeout(() => {
    img.src = img.getAttribute("data-src");
   }, delay);
  }
}
});
// 设置阈值
const threshold = 100;
// 设置延迟
const delay = 50;
</script>




[该贴被修改 1 次,最后修改时间 2023-11-30 20:36:28 ]



2023-11-30 20:36:04 已设置保密 顶部 回复 引用 报告 编辑 删除

pingpong
用户头衔:探花

精华贴   :0
发贴数   :9417
经验值   :24520
注册时间:2008-11-02
信息 搜索 好友 发送悄悄话 免费开源-EBMA系统:更安全的MYSQL管理和备份系统】   [第 13 楼]

谢谢分享




2023-12-01 07:44:59 已设置保密 顶部 回复 引用 报告 编辑 删除

包展昭
用户头衔:进士

精华贴   :0
发贴数   :676
经验值   :2690
注册时间:2017-05-08
信息 搜索 好友 发送悄悄话 精益求精-帝国网站管理系统7.5正式版开源发布】   [第 14 楼]





2023-12-01 09:40:22 已设置保密 顶部 回复 引用 报告 编辑 删除

明天你好
用户头衔:探花

精华贴   :0
发贴数   :2273
经验值   :6463
注册时间:2012-11-19
信息 搜索 好友 发送悄悄话 免费开源-EBMA系统:更安全的MYSQL管理和备份系统】   [第 15 楼]

收藏




2023-12-02 07:26:49 已设置保密 顶部 回复 引用 报告 编辑 删除

rere
用户头衔:举人

精华贴   :0
发贴数   :197
经验值   :1343
注册时间:2011-09-02
信息 搜索 好友 发送悄悄话 精益求精-帝国网站管理系统7.5正式版开源发布】   [第 16 楼]

改一下,确保页面所有图片都能被加载,特别是最底部的图片(有时候图片太贴近底部,会造成不加载)。





<script>
  // 获取页面可视区域的高度
  const visibleHeight = window.innerHeight;
  // 获取页面上所有图片的元素
  const imgs = document.querySelectorAll("img");
  // 为每个图片元素添加 data-src 属性
  for (const img of imgs) {
    img.setAttribute("data-src", img.src);
    img.src = "data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACH5BAEAAAAALAAAAAABAAEAAAIBRAA7";
  }

  // 设置阈值和延迟
  const threshold = 100;

  // 节流函数
  let throttleTimeout;
  function throttleScroll() {
    if (throttleTimeout) {
      return;
    }
    throttleTimeout = setTimeout(() => {
      throttleTimeout = null;
      lazyLoad();
    }, 200);
  }

  // 监听滚动事件
  window.addEventListener("scroll", throttleScroll);

  // 懒加载函数
  function lazyLoad() {
    // 遍历所有图片元素
    for (const img of imgs) {
      // 获取图片元素的顶部和底部位置
      const rect = img.getBoundingClientRect();
      const top = rect.top;
      const bottom = rect.bottom;

      // 如果图片元素的顶部或底部位置距离可视区域顶部距离小于阈值
      if ((top <= visibleHeight && bottom >= 0) || (bottom >= 0 && top <= visibleHeight + threshold)) {
        img.src = img.getAttribute("data-src");
      }
    }
  }

  // 初始加载一次
  lazyLoad();
</script>








2023-12-02 22:17:31 已设置保密 顶部 回复 引用 报告 编辑 删除

luoto
用户头衔:探花

精华贴   :0
发贴数   :5978
经验值   :17984
注册时间:2008-11-08
信息 搜索 好友 发送悄悄话 免费开源-EBMA系统:更安全的MYSQL管理和备份系统】   [第 17 楼]

支持楼上




2023-12-03 08:14:19 已设置保密 顶部 回复 引用 报告 编辑 删除

zhxin
用户头衔:探花

精华贴   :0
发贴数   :4017
经验值   :11068
注册时间:2013-01-09
信息 搜索 好友 发送悄悄话 精益求精-帝国网站管理系统7.5正式版开源发布】   [第 18 楼]

支持16楼,学习




2023-12-04 07:42:22 已设置保密 顶部 回复 引用 报告 编辑 删除

点到为止
用户头衔:探花

精华贴   :0
发贴数   :6727
经验值   :21021
注册时间:2008-01-07
信息 搜索 好友 发送悄悄话 免费开源-EBMA系统:更安全的MYSQL管理和备份系统】   [第 19 楼]

不错,谢谢分享




2023-12-05 07:25:39 已设置保密 顶部 回复 引用 报告 编辑 删除

hibaidu
用户头衔:探花

精华贴   :0
发贴数   :4044
经验值   :12321
注册时间:2010-05-26
信息 搜索 好友 发送悄悄话 精益求精-帝国网站管理系统7.5正式版开源发布】   [第 20 楼]

收藏




2023-12-06 07:01:35 已设置保密 顶部 回复 引用 报告 编辑 删除
 2/11    |‹ ‹‹ 1 2 3 4 5 6 7 8 9 10 ›› ›|

快速回复
内容

表情
使用EBB代码 使用smile代码 显示签名 自动分析url 自动分析img
     【进入高级模式】   (按 Ctrl+Enter 直接提交)
    顶部  加入收藏夹
关于帝国 | 广告服务 | 联系我们 | 法律声明 | 隐私条款 | 许可协议
Powered by: EBB Version 2.2.1