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

feier
用户头衔:探花

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

顶下




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

oldboy94
用户头衔:进士

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

原帖由 rere 于 2023-12-11 21:55:32 发表


这个是纯粹的JS,不需要再引用JQ库了。


html部分怎么写啊
<img data-src="xxxx.jpg" alt="123">
这样么 幻灯片或者tab隐藏的图片也有效么



QQ 78946876
2023-12-26 23:00:11 已设置保密 顶部 回复 引用 报告 编辑 删除

zhxin
用户头衔:探花

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

支持下




2023-12-27 07:55:46 已设置保密 顶部 回复 引用 报告 编辑 删除

rere
用户头衔:举人

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

原帖由 oldboy94 于 2023-12-26 23:00:11 发表


html部分怎么写啊
<img data-src="xxxx.jpg" alt="123">
这样么 幻灯片或者tab隐藏的图片...



对页面上所有的<img>标签有效。
如果你只想对某个class下的img标签生效,可以将

“ const imgs = document.querySelectorAll("img");”改成
“const imgs = document.querySelectorAll(".classname img");”


html代码:
<img src="..." alt="123"> 不需要自行添加data-src。

[该贴被修改 1 次,最后修改时间 2023-12-28 09:00:46 ]



2023-12-27 15:13:43 已设置保密 顶部 回复 引用 报告 编辑 删除

bn899
用户头衔:进士

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

支持楼上




2023-12-28 07:55:58 已设置保密 顶部 回复 引用 报告 编辑 删除

pingpong
用户头衔:探花

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

支持一下




2023-12-29 07:37:33 已设置保密 顶部 回复 引用 报告 编辑 删除

就是你
用户头衔:探花

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

支持




2023-12-30 07:23:08 已设置保密 顶部 回复 引用 报告 编辑 删除

rere
用户头衔:举人

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

如果是类似瀑布流,一个页面有无数图片的,也可以使用交错加载的方法,将图片加载过程分为多个小任务。


这样子,上面的代码就变成下面这样子,希望对大家有用。







<javascript>
// 获取页面可视区域的高度
const visibleHeight = window.innerHeight;

// 获取页面上所有具有指定 class 的图片元素
const imgs = document.querySelectorAll(".my-lazy-load-class img");

// 为每个图片元素添加 data-src 属性
for (const img of imgs) {
  img.setAttribute("data-src", img.src);
  img.src = "data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACH5BAEAAAAALAAAAAABAAEAAAIBRAA7";
}

// 使用交错加载技术,将图片加载过程分为多个小任务
let loadedImages = 0;
const loadBatch = 5;
function loadImages() {
  for (let i = 0; i < loadBatch && loadedImages < imgs.length; i++) {
    const img = imgs[loadedImages];
    // 获取图片元素的顶部和底部位置
    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");
      loadedImages++;
    }
  }
  if (loadedImages < imgs.length) {
    setTimeout(loadImages, 200);
  }
}

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

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

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

// 初始加载一次
loadImages();
</javascript>







2024-01-01 23:56:31 已设置保密 顶部 回复 引用 报告 编辑 删除

zhxin
用户头衔:探花

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

支持




2024-01-02 07:43:42 已设置保密 顶部 回复 引用 报告 编辑 删除

hibaidu
用户头衔:探花

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

支持一下




2024-01-03 07:47:07 已设置保密 顶部 回复 引用 报告 编辑 删除
 5/11    |‹ ‹‹ 3 4 5 6 7 8 9 10 11 ›› ›|

快速回复
内容

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