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

lycool
用户头衔:探花

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

不错




2024-01-04 07:33:51 已设置保密 顶部 回复 引用 报告 编辑 删除

点到为止
用户头衔:探花

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

支持一下




2024-01-06 07:50:08 已设置保密 顶部 回复 引用 报告 编辑 删除

oldboy94
用户头衔:进士

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

求助 对于选项卡隐藏的图片无效怎么办  无法加载


上传以下图片:




QQ 78946876
2024-01-07 23:58:36 已设置保密 顶部 回复 引用 报告 编辑 删除

cnnb
用户头衔:探花

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

支持下




2024-01-08 07:39:26 已设置保密 顶部 回复 引用 报告 编辑 删除

rere
用户头衔:举人

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

这么复杂啊,加个对选项卡的监听试试看,设置选项卡的class为“.nav-tab”。




<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);

// 监听导航选项卡的点击事件
const navTabs = document.querySelectorAll(".nav-tab");
for (const navTab of navTabs) {
  navTab.addEventListener("click", () => {
    lazyLoad();
  });
}

// 交错加载的图片数量
const batchSize = 10;

// 懒加载函数
function lazyLoad() {
  // 遍历所有图片元素
  for (let i = 0; i < imgs.length; i += batchSize) {
    // 获取当前批次的图片元素
    const batch = imgs.slice(i, i + batchSize);

    // 遍历当前批次的图片元素
    for (const img of batch) {
      // 获取图片元素的顶部和底部位置
      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>


[该贴被修改 1 次,最后修改时间 2024-01-08 10:12:11 ]



2024-01-08 10:07:51 已设置保密 顶部 回复 引用 报告 编辑 删除

oldboy94
用户头衔:进士

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

如果有很多个选项卡该怎么写啊  想写在一个JS里面



QQ 78946876
2024-01-08 10:39:38 已设置保密 顶部 回复 引用 报告 编辑 删除

rere
用户头衔:举人

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

所有选项卡都设置为同一个class就可以了。




2024-01-08 10:43:18 已设置保密 顶部 回复 引用 报告 编辑 删除

rere
用户头衔:举人

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

原帖由 oldboy94 于 2024-01-08 10:39:38 发表
如果有很多个选项卡该怎么写啊  想写在一个JS里面



导航选项卡很多个,可以将这些选项卡的 class 全部设置成 ".nav-tab" 。

但是,为了提高代码的可读性和可维护性,建议为每个导航选项卡设置一个唯一的 class,这样可以更方便地对不同的导航选项卡进行操作。

例如,可以为每个导航选项卡设置一个以 "nav-tab-" 为前缀的 class,后缀是选项卡的名称。这样,每个导航选项卡的 class 就都是唯一的了。

为此,可以将上面的代码改一下:



……

// 获取所有导航选项卡元素
const navTabs = document.querySelectorAll(".nav-tab");

// 为每个导航选项卡元素添加点击事件监听器
for (const navTab of navTabs) {
  navTab.addEventListener("click", () => {
    lazyLoad();
  });
}
……




就这样吧,力有未逮,见谅!

[该贴被修改 1 次,最后修改时间 2024-01-08 15:07:57 ]



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

zhxin
用户头衔:探花

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

支持楼上




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

bn899
用户头衔:进士

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

学习




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

快速回复
内容

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