it编程 > 编程语言 > Javascript

基于JavaScript+IntersectionObserver实现高性能图片懒加载

38人参与 2025-02-14 Javascript

一、前言

在 web 开发中,图片懒加载是一种常见的优化手段,尤其在长列表页面中,按需加载图片可以显著提升页面性能。本篇文章将通过 javascript 和 intersection observer,实现一个带有卡片样式的高性能图片懒加载示例。

二、样式布局

以下是卡片列表的样式,采用了 css grid 布局,支持响应式排列,并为图片卡片添加了缩放动画效果:

body {
  background-color: #f5f6f7;
}

.card-list {
  --ap-gap: 16px; /* 列表项的间距 */
  --ap-min-width: 300px; /* 列表项的最小宽度 */
  display: grid;
  grid-template-columns: repeat(auto-fill, minmax(var(--ap-min-width), 1fr));
  gap: var(--ap-gap);
  padding: 16px;
}

.card-list .item {
  cursor: pointer;
  height: 497px;
  border-radius: 10px;
  box-shadow: 0 0 6px #000;
  overflow: hidden;
}

.card-list .item:hover img {
  transform: scale(1.5);
}

.card-list .item img {
  display: block;
  width: 100%;
  height: 100%;
  transition: all 0.32s;
}

上述样式不仅定义了图片卡片的基本外观,还支持鼠标悬停时的动态缩放效果,提升了用户体验。

三、html 结构

页面结构简单明了,通过 javascript 动态生成卡片列表:

<div class="card-list"></div>

四、实现逻辑

1、配置项与生成图片卡片

通过以下代码,动态生成 99 张图片卡片,使用默认占位图提高页面加载速度:

const total_items = 99;
const default_img = './img/default.jpg';
const img_url_template = (index) => `https://picsum.photos/400/600?r=${index}`;

const cardlist = document.queryselector('.card-list');

function generateitems() {
  const fragment = document.createdocumentfragment();
  for (let i = 0; i < total_items; i++) {
    const div = document.createelement('div');
    div.classlist.add('item');
    const img = document.createelement('img');
    img.src = default_img;
    img.dataset.src = img_url_template(i);
    img.alt = `image ${i + 1}`;
    div.appendchild(img);
    fragment.appendchild(div);
  }
  cardlist.appendchild(fragment);
}
generateitems();

2、使用 intersection observer 实现懒加载

通过 intersection observer,可以高效检测图片是否进入视口,并在合适的时机加载真实图片:

function initlazyload() {
  const observer = new intersectionobserver(
    (entries, observer) => {
      entries.foreach((entry) => {
        if (!entry.isintersecting) return;
        const img = entry.target;
        img.src = img.dataset.src;
        observer.unobserve(img);
      });
    },
    { threshold: 0.01 }
  );

  document.queryselectorall('img[data-src]').foreach((img) => observer.observe(img));
}
initlazyload();

本文通过样式优化和 intersection observer,有效提升了图片懒加载的性能,同时保持了良好的用户体验。这种实现方式不仅适用于图片懒加载,也可以扩展到其它按需加载场景,如视频或组件加载。

到此这篇关于基于javascript+intersectionobserver实现高性能图片懒加载的文章就介绍到这了,更多相关javascript intersectionobserver图片懒加载内容请搜索代码网以前的文章或继续浏览下面的相关文章希望大家以后多多支持代码网!

(0)
打赏 微信扫一扫 微信扫一扫

您想发表意见!!点此发布评论

推荐阅读

前端防抖(Debounce)和节流(Throttle)的概念、区别、应用场景及实现方法

02-14

前端实现文件下载常见的几种方法总结

02-14

前端实现水印功能的几种方法及优缺点

02-14

一文熟练掌握JavaScript中Object.keys()与Object.values()的实用技巧

02-14

前端滚动锚点三个常用方案(点击后页面滚动到指定位置)

02-14

JavaScript页面滚动事件举例详解

02-14

猜你喜欢

版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。

发表评论