首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

js图片按需加载实现

JavaScript 图片按需加载是一种优化网页性能的技术,它允许页面上的图片在用户滚动到它们的位置时才加载,而不是一次性加载所有图片。这样可以减少初始页面加载时间,提高用户体验。

基础概念

图片按需加载通常通过以下几种方式实现:

  1. 懒加载(Lazy Loading):这是最常见的实现方式,图片在进入视口时才加载。
  2. 预加载(Preloading):在页面加载完成后,提前加载用户可能滚动到的图片。

实现方式

以下是一个简单的懒加载实现示例:

HTML

代码语言:txt
复制
<img class="lazy" data-src="image1.jpg" alt="Image 1">
<img class="lazy" data-src="image2.jpg" alt="Image 2">
<!-- 更多图片 -->

CSS

代码语言:txt
复制
.lazy {
  opacity: 0;
  transition: opacity 0.3s;
}

.lazy.loaded {
  opacity: 1;
}

JavaScript

代码语言:txt
复制
document.addEventListener("DOMContentLoaded", function() {
  const lazyImages = [].slice.call(document.querySelectorAll("img.lazy"));

  if ("IntersectionObserver" in window) {
    let lazyImageObserver = new IntersectionObserver(function(entries, observer) {
      entries.forEach(function(entry) {
        if (entry.isIntersecting) {
          let lazyImage = entry.target;
          lazyImage.src = lazyImage.dataset.src;
          lazyImage.classList.add("loaded");
          lazyImageObserver.unobserve(lazyImage);
        }
      });
    });

    lazyImages.forEach(function(lazyImage) {
      lazyImageObserver.observe(lazyImage);
    });
  } else {
    // 如果浏览器不支持 IntersectionObserver,可以使用传统的滚动事件监听
    function lazyLoad() {
      lazyImages.forEach(function(lazyImage) {
        if (lazyImage.getBoundingClientRect().top <= window.innerHeight && lazyImage.getBoundingClientRect().bottom >= 0 && getComputedStyle(lazyImage).display !== "none") {
          lazyImage.src = lazyImage.dataset.src;
          lazyImage.classList.add("loaded");
          lazyImages = lazyImages.filter(function(image) {
            return image !== lazyImage;
          });
          if (lazyImages.length === 0) {
            document.removeEventListener("scroll", lazyLoad);
            window.removeEventListener("resize", lazyLoad);
            window.removeEventListener("orientationChange", lazyLoad);
          }
        }
      });
    }

    document.addEventListener("scroll", lazyLoad);
    window.addEventListener("resize", lazyLoad);
    window.addEventListener("orientationChange", lazyLoad);
    lazyLoad();
  }
});

优势

  1. 提高页面加载速度:减少初始请求的数据量。
  2. 节省带宽:用户只加载他们实际看到的图片。
  3. 改善用户体验:页面看起来加载更快,因为内容逐渐显示。

应用场景

  • 电商网站:展示大量商品图片。
  • 社交媒体平台:如微博、Instagram等。
  • 新闻网站:长页面包含多个图片。

可能遇到的问题及解决方法

问题1:图片加载顺序错误

  • 原因:用户快速滚动时,图片加载顺序可能与显示顺序不一致。
  • 解决方法:使用IntersectionObserver可以更精确地控制加载时机,减少顺序错乱的可能性。

问题2:兼容性问题

  • 原因:一些旧版浏览器不支持IntersectionObserver
  • 解决方法:提供回退方案,如使用传统的滚动事件监听。

问题3:性能问题

  • 原因:频繁的DOM操作和事件监听可能导致性能下降。
  • 解决方法:优化代码,减少不必要的DOM操作,并合理使用防抖(debounce)或节流(throttle)技术。

通过上述方法,可以有效地实现图片按需加载,并解决常见的实现问题。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

按需加载js和css

博客上有一个用mediaelement-and-player.js弄的播放器,插件默认的是每个页面都加载一次mediaelement-and-player.min.js和mediaelementplayer.min.css...,两个文件都十分的庞大,加起来接近100k,虽然gzip之后只剩下20多k但是也是十分地不爽,所以我便寻思着有没有什么办法能有播放器的时候就加载它,没有播放器的时候就不加载。...于是我往前端去思考,我们都知道html网页都是由dom组成的,假如我们判断到可以加载播放器的时候再让它document.write()出那个代码同也就能实现这个功能,而且对后端没什么影响。...实现的方法其实很简单,首先我们可以在页面顶部header部分声明一个默认为false的变量: var loadplayer=false; 然后在插入播放器的部分把这个变量设置为...这样那些用不上的js就不会加载啦,网页加载速度也会快不少。 不知道css放在页面底部会不会有什么副作用,目前还没遇到什么问题,望大神指点迷津。 不过我觉得这种方式应该是最愚蠢的╮(╯▽╰)╭

2.8K20
  • 实现图片懒加载jquery.scrollLoading.js

    首先需要jquery.min.js插件,我用的是jQuery v2.1.3,大家可以去百度搜很多自己引入全局顶部即可,当然你的程序自带就不需要在引用JQ了。...第一步 找到你的全局顶部文件,上面已经说了如果你程序自带jq就忽略即可,大概就这样吧 第二步 找到你的底部文件,增加两段jspiex.gif为你要首次懒加载的图片,图片大家可以自己去找或者用我的 点击查看懒加载图片...script> $(function () { $(".scrollLoading").scrollLoading(); }); 第三步 找到你的全局js...文件,粘贴下方的js。...实在不懂是哪个建议先进入到你的文章页按F12打开控制台看看加载了哪个js就扔进去 (function($) { $.fn.scrollLoading = function(options) {

    2.2K20

    lazyload.js实现图片异步延迟加载

    所谓图片异步加载,意思是不用一次把图片全部加载完,你可以叫它延迟加载,缓冲加载都行。...lazyload就是用来实现这种效果。 lazyload.js其实是jQuery的一个插件,全称是jquery.lazyload.js,看它的名字就知道它的作用了——就是偷懒载入的意思。...想要使用lazyload,得先载入jQuery,它是依靠jQuery来实现效果的。...; 代码精简,便于操作维护,JS代码仅仅 1.6KB 先决条件是:你的站加载了 Jquery.js 原理: 这个特效是少有的即华丽又加速的效果,因为它能判断访客是不是在查看当前图片,若非则加载预留的填充图片...不用担心对访客的友好程度,这个效果会在图片即将被浏览到的时候就开始加载图片; 实现方法: 下载 jquery.lazyload.js      下载 预填充图片 fill.gif 点此打包下载

    12.8K20

    原生 JS 实现最简单的图片懒加载

    懒加载 什么是懒加载 懒加载其实就是延迟加载,是一种对网页性能优化可方式,比如当访问一个页面的时候,优先显示可视区域的图片而不一次性加载所有图片,当需要显示的时候再发送图片请求,避免打开网页时加载过多资源...什么时候用懒加载 当页面中需要一次性载入很多图片的时候,往往都是需要用懒加载的。 懒加载原理 我们都知道HTML中的 标签是代表文档中的一个图像。。说了个废话。。...实现 HTML结构 加载图片 页面打开时需要对所有图片进行检查,是否在可视区域内,如果是就加载。...,当滚动条滚动时就不需要遍历所有的图片,只需要遍历未加载的图片即可。

    3K20

    ArcGIS JS API 4.14实现地图加载图片

    主要介绍如何用ArcGIS JS API 4.14实现在二维地图中添加图片的操作。...需求描述 将一张图片叠加到ArcGIS地图上是现在很多项目的一个广泛需求,通过查阅网上资料后发现这种需求目前只有四种方法可以实现,因为ArcGIS JS API官网并没有提供相应的图片类图层来让我们实例化图片图层...Symbol; 通过类似于ArcGIS JS API 3.X中的MapImage模块来实现; 通过扩展MapImageLayer来实现; 通过JS API官网上的BaseDynamicLayer这个类来实现...的形式实现 这种方式是我在网上找到的第一种实现方式,也是最简单的一种,它的原理其实就是将图片作为一个Symbol符号,因为ArcGIS JS API的符号类已经支持图片符号了,所以将图片作为一个符号,然后添加到实例化...通过类似于ArcGIS JS API 3.X中的MapImage模块来实现 在ArcGIS JS API 3.X和ArcGIS JS API 4.X中都有MapImage模块,在3.X版本中可以通过这个模块来实例化一个图片信息类

    4.5K30

    前端-原生JS实现最简单的图片懒加载

    懒加载 ---- 什么是懒加载 懒加载其实就是延迟加载,是一种对网页性能优化的方式,比如当访问一个页面的时候,优先显示可视区域的图片而不一次性加载所有图片,当需要显示的时候再发送图片请求,避免打开网页时加载过多资源...什么时候用懒加载 当页面中需要一次性载入很多图片的时候,往往都是需要用懒加载的。 懒加载原理 我们都知道HTML中的 标签是代表文档中的一个图像。。说了个废话。。...实现 ---- HTML结构      加载图片 页面打开时需要对所有图片进行检查,是否在可视区域内,如果是就加载。...index,当滚动条滚动时就不需要遍历所有的图片,只需要遍历未加载的图片即可。

    5.1K30

    实现图片懒加载

    Web 图片的懒加载就是通过读取img元素,然后获得img元素的data-src(也可以约定为其他属性名)属性的值,并赋予img的src,从而实现动态加载图片的机制。...这里需要注意的是: img在初始化的时候不要设置src属性,因为即使设置 src='' 浏览器也会尝试加载图片。 一个简单的图片懒加载共涉及两个方面, 1....JavaScript 实现 动态加载总共分为以下几个步骤,这里每个步骤都将被拆分为独立的函数 1....当网页滚动的事件被触发 -> 执行加载图片操作 -> 判断图片是否在可视区域内 -> 在,则动态将data-src的值赋予该图片。...selector); for (var i = 0, l = nodes.length; i < l; i++) { imgList.push(nodes[i]); } }; })(); 来源: 实现一个图片懒加载插件有多难

    1.5K40

    vue按需加载组件

    Vue按需加载组件 #1 环境 "vue": "^2.5.2", "element-ui": "^2.12.0", "view-design": "^4.0.0", #2 需求 在完整导入iView组件之后...,iView不能满足需求,需要导入element组件,但是完成导入可能会导致文件过大,这时,需要按需求引入ele组件 #3 开始 #3.1 安装 借助 babel-plugin-component,...} ] ] } #3.3 引入 新建element 文件夹 在 src 文件夹中新建我们的 other_ui/element 文件夹,并在里面新建一个 index.js...} } export default element 注意: 这里要使用 Select 组件,必须同时使用 Option 和 OptionGroup 这里的 install 方法表示在 main.js...中,如果使用 Vue.use() 方法的话,则该方法默认会调用 install 方法 在 main.js 中使用该文件,就大功告成了 // 按需加载element组件 import 'element-ui

    1.4K20

    ArcGIS JS API 4.15实现地图加载图片(优化版)

    主要介绍如何用ArcGIS JS API 4.15实现在二维地图中添加图片的操作。...写在前面 之前写了一篇关于在ArcGIS地图上添加图片的文章,关注度还可以,在项目中也用文章中提到的技术路线实现了地图叠加图片的需求。...但是最近客户又有了新需求,因为我们在之前的文章中通过扩展图层来实现图片添加后,如果图片中某一处的信息比较丰富,在地图缩放的一瞬间如果我们拖动地图的话,那部分的图片会有卡顿。...之前文章的地址如下:《ArcGIS JS API 4.14实现地图加载图片》。...screen_rightbottom.y - screen_lefttop.y + 'px'; } } }); 6、完成以上操作后,我们就成功的实现了地图加载图片的过程

    2.4K20
    领券