首屏优化-图片懒加载的代码实践(可直接运行)

本文介绍了一个使用JavaScript实现图片懒加载的示例,通过监听滚动事件和判断图片是否进入视窗来延迟加载图片,同时处理加载失败的情况,保持页面布局整洁。
摘要由CSDN通过智能技术生成

实现图片懒加载时,可以使用 JavaScript 监听滚动事件,并根据图片是否进入可视区域来延迟加载图片。

方案一

<!DOCTYPE html>
<html>
  <head>
    <style>
      .placeholder {
        width: 300px;
        height: 200px;
        background-color: #ccc;
      }
      .image {
        width: 300px;
        height: 200px;
        object-fit: cover;
      }
    </style>
  </head>
  <body>
    <h1>Lazy Loading Images Demo</h1>
    <div class="placeholder"></div>
    <!-- 这儿可以讨论 v-for 渲染 -->
    <img class="image" data-src="path/to/image.jpg" alt="Lazy Loaded Image" onerror="handleImageError(this)">

    <script>
      // 获取所有具有 data-src 属性的图片元素
      const images = document.querySelectorAll('img[data-src]');
      // 监听滚动事件
      window.addEventListener('scroll', lazyLoad);
      // 初始化时触发一次懒加载
      lazyLoad();

      function lazyLoad() {
        // 获取视窗的顶部和底部位置
        const windowHeight = window.innerHeight;
        const windowTop = window.pageYOffset || document.documentElement.scrollTop;
        const windowBottom = windowTop + windowHeight;

        // 遍历每个具有 data-src 属性的图片元素
        images.forEach((img) => {
          // 判断图片是否进入视窗
          const imgTop = img.offsetTop;
          const imgBottom = imgTop + img.offsetHeight;
          if (imgTop < windowBottom && imgBottom > windowTop) {
            // 加载图片
            img.src = img.dataset.src;
            // 移除 data-src 属性,避免重复加载
            img.removeAttribute('data-src');
          }
        });

        // 如果所有图片都已加载完毕,移除滚动事件的监听
        if (images.length === 0) {
          window.removeEventListener('scroll', lazyLoad);
        }
      }
      
      function handleImageError(img) { 
        // 图片加载失败时显示替代文本 
        img.alt = 'Image Failed to Load'; 
        // 隐藏无法加载的图片 
        img.style.display = 'none'; 
      }
      
      // 在页面加载完成后,直接加载可见范围内的图片(避免初始的空白占位)
      document.addEventListener('DOMContentLoaded', lazyLoad);
    </script>
  </body>
</html>

在上面的示例中,图片标签添加了 data-src 属性来保存图片的真实地址。通过 JavaScript,监听滚动事件并判断图片是否进入视窗,当图片进入视窗时,将 data-src 的值赋给 src 属性,实现延迟加载图片。当图片加载失败时会触发 handleImageError 函数。该函数将替代文本设置为 “Image Failed to Load”,并将无法加载的图片隐藏起来。这样用户就能知道该图像无法加载,并且页面的布局不会被破坏。

  • 8
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
ava实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),可运行高分资源 Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值