如何用原生JavaScript实现懒加载?这5种方法你必须掌握

js,jquery懒加载demo 懒加载,滚动加载数据!demo 立即下载

第一章:JavaScript懒加载技术概述

JavaScript懒加载(Lazy Loading)是一种优化网页性能的常用技术,其核心思想是延迟加载非关键资源,仅在需要时才进行加载。这种策略特别适用于图片、视频、模块组件或长页面中的内容区块,能够显著减少初始页面加载时间,降低带宽消耗,并提升用户体验。

懒加载的基本原理

懒加载通过监听用户的滚动行为或其他触发条件,动态判断资源是否进入视口(viewport),一旦元素可见,则加载对应的资源。传统做法使用 window.onscroll 事件结合 getBoundingClientRect() 方法检测元素位置,现代浏览器则推荐使用 IntersectionObserver API,它具有更高的性能和更简洁的语法。

实现一个基础的图片懒加载

以下是一个使用 IntersectionObserver 实现图片懒加载的示例:

// 选择所有带有 data-src 属性的图片
const lazyImages = document.querySelectorAll('img[data-src]');

// 创建观察器实例
const imageObserver = new IntersectionObserver((entries, observer) => {
  entries.forEach(entry => {
    if (entry.isIntersecting) {
      const img = entry.target;
      img.src = img.dataset.src; // 将真实图片地址赋值给 src
      img.removeAttribute('data-src'); // 移除 data-src 防止重复加载
      observer.unobserve(img); // 停止观察已加载的图片
    }
  });
});

// 观察每一张懒加载图片
lazyImages.forEach(img => imageObserver.observe(img));

懒加载的优势与适用场景

  • 提升首屏加载速度,优化关键渲染路径
  • 减少服务器请求压力,节省用户流量
  • 适用于图像画廊、新闻列表、无限滚动页面等长内容场景
技术方案兼容性性能表现
scroll 事件 + getBoundingClientRect高中(频繁触发重排)
IntersectionObserver API现代浏览器支持良好高(异步回调,不影响主线程)

第二章:基于事件监听的图片懒加载实现

2.1 懒加载核心原理与触发时机分析

懒加载(Lazy Loading)是一种延迟对象或资源初始化的策略,常用于提升应用启动性能。其核心思想是:仅在真正需要时才加载目标数据,避免冗余开销。
触发机制解析
常见触发条件包括属性访问、方法调用或事件监听。以 JavaScript 为例:
const lazyImage = new Image();
lazyImage.onload = () => {
  document.getElementById('container').appendChild(lazyImage);
};
lazyImage.src = 'image.png'; // 此时才发起网络请求
上述代码中,图片资源在 src 赋值时触发加载,实现按需获取。
应用场景对比
  • 前端路由:页面模块动态导入
  • ORM框架:关联对象延迟查询
  • 长列表渲染:可视区域元素按需加载

2.2 scroll事件驱动的可视区检测实践

在长列表或图片墙等场景中,常需检测元素是否进入视口以触发加载或动画。通过监听 `scroll` 事件并结合 `getBoundingClientRect()` 可实现高效检测。
基本实现逻辑
监听窗口滚动,对目标元素位置进行实时判断:
window.addEventListener('scroll', () => {
  const element = document.querySelector('.target');
  const rect = element.getBoundingClientRect();
  if (rect.top < window.innerHeight && rect.bottom > 0) {
    element.classList.add('visible'); // 进入视口
  }
});
上述代码中,getBoundingClientRect() 返回元素相对于视口的位置,innerHeight 表示视口高度。当元素顶部低于视口底边且底部高于视口顶边时,判定为可见。
性能优化策略
频繁触发 scroll 事件易导致性能问题,可通过节流控制执行频率:
  • 使用 throttle 限制函数调用频率
  • 结合 Intersection Observer API 替代手动计算,提升效率

2.3 resize与orientationchange事件的兼容处理

在多设备适配开发中,resize 和 orientationchange 事件是响应屏幕尺寸变化的核心手段。尽管现代浏览器普遍支持这两个事件,但在移动端尤其是 iOS Safari 中,orientationchange 并不会总是触发 resize,需独立监听。
事件监听的统一注册
为确保跨平台一致性,建议同时绑定两个事件:
window.addEventListener('resize', handleResize);
window.addEventListener('orientationchange', function() {
    // 延迟执行以确保尺寸已更新
    setTimeout(handleResize, 50);
});
上述代码中,setTimeout 用于规避 iOS 下方向变更后 screen.width 延迟更新的问题。
兼容性差异对比
浏览器resize触发时机orientationchange是否触发resize
Chrome (Desktop)窗口大小变化否
Safari (iOS)页面重排时部分机型不触发

2.4 防抖与节流优化滚动性能

在处理高频触发的浏览器事件(如滚动、窗口缩放)时,频繁执行回调会带来显著的性能负担。防抖(Debounce)和节流(Throttle)是两种有效的优化策略。
防抖机制
防抖确保函数在事件停止触发后的一段时间才执行,适用于搜索输入等场景。
function debounce(func, delay) {
  let timer;
  return function (...args) {
    clearTimeout(timer);
    timer = setTimeout(() => func.apply(this, args), delay);
  };
}
// 使用:window.addEventListener('scroll', debounce(handleScroll, 100));
上述代码中,timer用于存储定时器,每次触发事件都会重置延迟执行时间,仅当连续触发间隔超过delay时才会执行目标函数。
节流策略
节流则保证函数在指定周期内最多执行一次,更适合滚动监听。
  • 使用时间戳实现:通过比较当前时间和上次执行时间差控制调用频率
  • 使用定时器实现:设置延迟执行并防止重复注册

2.5 实战:纯JavaScript图片延迟加载组件封装

在网页性能优化中,图片延迟加载(Lazy Load)是提升首屏渲染速度的关键技术。通过监听滚动事件,动态加载进入视口区域的图片,可显著减少初始资源请求。
核心实现逻辑
使用 getBoundingClientRect() 判断元素是否进入可视区域,并结合 data-src 属性存储真实图片路径。
function lazyLoad() {
  const images = document.querySelectorAll('img[data-src]');
  images.forEach(img => {
    const rect = img.getBoundingClientRect();
    if (rect.top < window.innerHeight && !img.src) {
      img.src = img.dataset.src;
    }
  });
}
window.addEventListener('scroll', lazyLoad);
上述代码通过遍历所有带有 data-src 的图片标签,在其进入视口时将占位符替换为真实图像地址,避免无效加载。
优化策略对比
  • 滚动节流:使用 throttle 控制事件触发频率
  • Intersection Observer API:更高效的异步监听方案
  • 预加载处理:对即将进入视口的图片提前加载

第三章:Intersection Observer API高效实现

3.1 Intersection Observer核心概念解析

Intersection Observer API 是现代浏览器提供的用于异步监测元素与视口相交状态的接口,避免了传统 `scroll` 事件带来的性能问题。
基本使用结构
const observer = new IntersectionObserver((entries) => {
  entries.forEach(entry => {
    if (entry.isIntersecting) {
      console.log('元素可见');
    }
  });
}, {
  threshold: 0.1
});
observer.observe(document.querySelector('#target'));
上述代码中,threshold: 0.1 表示当目标元素有 10% 可见时触发回调。回调函数接收 entries 数组,包含每个被观察元素的交叉状态信息。
关键配置选项
  • root:指定根容器(默认为视口)
  • rootMargin:扩展或收缩 root 的边界
  • threshold:触发回调的可见比例,可为数组

3.2 监听元素进入视口并动态加载资源

在现代前端性能优化中,延迟加载(Lazy Loading)是提升页面初始渲染速度的关键技术之一。通过监听元素是否进入视口,可实现图片、组件或数据的按需加载。
Intersection Observer API 基础用法
该功能推荐使用 IntersectionObserver 实现,避免频繁触发 scroll 事件带来的性能损耗。
const observer = new IntersectionObserver((entries) => {
  entries.forEach(entry => {
    if (entry.isIntersecting) {
      const img = entry.target;
      img.src = img.dataset.src; // 动态加载真实图片
      observer.unobserve(img);   // 加载后停止监听
    }
  });
});

// 监听所有待加载的图片
document.querySelectorAll('img[data-src]').forEach(img => {
  observer.observe(img);
});
上述代码中,entry.isIntersecting 表示元素已进入视口;data-src 存储延迟加载的图像地址;unobserve() 避免重复加载。
适用场景与优势
  • 长页面中的图片/视频懒加载
  • 无限滚动内容预加载
  • 动态引入重型组件(如图表、地图)

3.3 兼容性处理与降级方案设计

在微服务架构中,接口版本迭代频繁,良好的兼容性设计至关重要。应遵循“向前兼容”原则,确保新版本服务能正确处理旧版本请求。
字段兼容处理
新增字段应设为可选,避免强制解析导致反序列化失败。例如在 Go 结构体中使用指针或 omitempty 标签:
type User struct {
    ID   int    `json:"id"`
    Name string `json:"name"`
    Age  *int   `json:"age,omitempty"` // 新增字段使用指针,兼容旧客户端
}
该设计允许旧版客户端不传 age 字段,新版服务也能正常解析。
降级策略配置
通过配置中心动态控制降级开关,保障核心链路稳定性:
  • 读服务降级:返回缓存数据或默认值
  • 写服务降级:异步队列暂存请求
  • 依赖服务不可用时自动熔断

第四章:响应式与预加载策略结合应用

4.1 根据网络状况动态调整加载优先级

在现代Web应用中,网络环境的不确定性要求资源加载策略具备动态适应能力。通过实时监测网络质量,可智能调整脚本、样式、图片等资源的加载顺序。
网络状态检测机制
利用 navigator.connection API 获取有效网络类型与下行速率:
if ('connection' in navigator) {
  const { effectiveType, downlink } = navigator.connection;
  // effectiveType: 'slow-2g', '2g', '3g', '4g'
  // downlink: 预估下行带宽(Mbps)
}
该信息可用于初始化加载策略:低带宽环境下延迟非关键资源加载。
优先级调度策略
  • 关键资源(如首屏组件)始终高优先级
  • 根据 downlink < 1.5 判断为弱网,启用懒加载与占位图
  • 预加载策略降级,避免阻塞主线程

4.2 使用data属性管理懒加载资源路径

在现代前端开发中,通过 `data-*` 属性管理懒加载资源路径是一种高效且语义清晰的实践方式。它将资源的真实路径存储于自定义数据属性中,避免页面初始加载时的不必要请求。
基本实现结构
<img data-src="image-heavy.jpg" alt="懒加载图片" class="lazy">
上述代码中,`data-src` 替代了传统的 `src`,防止图片立即加载。JavaScript 可在适当时机读取该值并赋给 `src`。
动态加载逻辑
  • 监听页面滚动或元素进入视口(Intersection Observer)
  • 查找出所有带有 data-src 的元素
  • 将 data-src 值赋给 src,触发资源加载
  • 移除或标记已加载项,避免重复操作
这种方式提升了首屏性能,同时保持 HTML 结构清晰、易于维护。

4.3 图片占位符与加载状态反馈设计

在现代Web应用中,图片资源的异步加载常导致页面布局抖动或用户感知延迟。为提升用户体验,需引入图片占位符与加载状态反馈机制。
占位符类型设计
常见的占位方案包括:
  • 固定尺寸的灰色背景块
  • 低质量图像预览(LQIP)
  • SVG骨架图
加载状态实现示例
function ImageWithPlaceholder({ src, alt }) {
  const [loading, setLoading] = useState(true);
  return (
    <div>
      <img 
        src={src} 
        alt={alt} 
        onLoad={() => setLoading(false)} 
        style={{ display: loading ? 'none' : 'block' }}
      />
      {loading && <div className="placeholder">Loading...</div>}
    </div>
  );
}
上述代码通过监听 onLoad 事件控制真实图片与占位元素的切换,确保视觉连续性。参数 loading 初始为 true,图片加载完成后置为 false,触发UI更新。

4.4 实战:支持多种媒体类型的懒加载通用方案

在现代前端开发中,页面性能优化离不开对图片、视频等媒体资源的懒加载处理。本节实现一个可扩展的通用懒加载方案,支持图像、视频、iframe 等多种媒体类型。
核心实现逻辑
通过 IntersectionObserver 监听元素进入视口,并根据 data-src 和 data-type 动态加载资源:

function initLazyLoad() {
  const observer = new IntersectionObserver((entries) => {
    entries.forEach(entry => {
      if (entry.isIntersecting) {
        const el = entry.target;
        const src = el.dataset.src;
        const type = el.dataset.type || 'image';

        switch(type) {
          case 'image':
            el.src = src;
            break;
          case 'video':
            el.src = src;
            el.play();
            break;
          case 'iframe':
            el.src = src;
            break;
        }
        observer.unobserve(el);
      }
    });
  });

  document.querySelectorAll('[data-src]').forEach(el => observer.observe(el));
}
上述代码中,data-src 存储真实资源地址,data-type 标识媒体类型。观察器触发后,依据类型设置对应属性并停止监听。
配置映射表
使用表格统一管理标签与属性映射关系:
媒体类型标签属性
image<img>src
video<video>src + play()
iframe<iframe>src

第五章:懒加载最佳实践与性能评估

合理设置阈值提升用户体验
在实现懒加载时,应避免临界触发导致用户滚动卡顿。通过 Intersection Observer API 设置合理的 rootMargin,可提前加载即将进入视口的内容。

const observer = new IntersectionObserver((entries) => {
  entries.forEach(entry => {
    if (entry.isIntersecting) {
      const img = entry.target;
      img.src = img.dataset.src;
      observer.unobserve(img);
    }
  });
}, {
  rootMargin: '50px' // 提前50px开始加载
});
资源优先级与预加载策略协同
对关键路径上的图片或组件采用低分辨率占位图配合懒加载,同时结合 loading="lazy" 原生属性控制非首屏图像。
  • 首屏外的图片添加 data-src 替代 src
  • 使用 WebP 格式降低占位资源体积
  • 动态模块按路由拆分,配合 webpack 的 import() 懒加载
性能监控与量化评估
通过 Lighthouse 和 Performance API 收集关键指标,对比启用懒加载前后的表现差异:
指标启用前启用后
LCP (秒)4.22.6
首包大小 (KB)1870960
错误处理与降级机制
为防止观察器失效或脚本加载失败,需提供 fallback 方案:

if ('IntersectionObserver' in window) {
  observer.observe(target);
} else {
  // 降级:滚动事件监听 + offsetTop 判断
  window.addEventListener('scroll', loadImages);
}
JS实现页面数据懒加载 页面数据懒加载。Div移动到可视区域再去ajax加载内容。 最近有需求做页面的多个table用于加载数据,但是用户浏览页面的时候不需要一次将页面所有的东西加载出来,比如页面上3个table就占满了,用户点进去第一眼也就只能看到3个。为了防止一次加载拖慢了页面的速度,所以之后的table我们要懒加载。即该table移动到了可视区域再去异步请求加载数据。 以下为目前实现的方法: <!-- page lazyloading --> [removed] $(function(){ // 设置布尔值用于判断是否该DIV到达过可视区域 var scrollflaga = true; // 监听滚 立即下载

相关推荐

AD9361 Fast Lock实战:Python脚本自动生成Profile寄存器配置(附完整代码)

本文详细介绍了利用Python脚本实现AD9361 Fast Lock Profile寄存器自动化配置的实战方案。通过解析频率合成公式、VCO约束及查表机制,脚本能根据目标频率一键生成完整的16进制寄存器序列,大幅提升射频系统开发中多频点切换的效率和准确性,并支持CSV、JSON、C头文件等多种输出格式,便于与FPGA/嵌入式系统集成。

weixin_29194693的博客 475

JS基础 | 实现懒加载

懒加载:只在数据或内容即将进入视口或即将需要的时候才加载。

m0_73460278的博客 1303

STM32控制舵机SG-5010转动,HAL库

首先设置时钟为72Mhz,预分频系数为72-1,自动重装载计数器的值为5000-1,这样的话就可以得到一个5ms的脉冲宽度,5000的计数值可以让舵机的旋转角度变得更加易控且相对精准,计算旋转角度的时候也可以更加精确。所以我们5ms脉宽,period是5000脉宽-------------角度----------pulse0.5ms-------------0度----------500;1.0ms------------45度---------1000;

qq_73783264的博客 1291

JavaScript中的懒加载——概念,作用,原理,实现步骤,以及3种原生js实现方式

1.什么是懒加载? 懒加载也就是延迟加载。 当访问一个页面的时候,先把img元素或是其他元素的背景图片路径替换成一张大小为1*1px图片的路径(这样就只需请求一次,俗称占位图), 只有当图片出现在浏览器的可视区域内时,才设置图片正真的路径,让图片显示出来。这就是图片懒加载。 2.为什么要使用懒加载? 很多页面,内容很丰富,页面很长,图片较多。比如说各种商城页面。这些页面图片数量多,而且比较大,少说百来K,多则上兆。 要是页面载入就一次性加载完毕。估计大家都会等到黄花变成黄花菜了。 3.懒加载的

王春燕的博客 7044

ARM架构下的SLAM部署避坑指南:香橙派AIpro与D435i深度相机的实战解析

本文详细解析了在ARM架构的香橙派AIpro开发板上部署SLAM算法并与Intel D435i深度相机配合的实战经验。内容涵盖系统配置、ROS编译、驱动安装、算法优化等关键步骤,提供了具体的避坑指南和性能调优技巧,帮助开发者在嵌入式平台上高效实现实时SLAM应用。

f0g1h2的博客 980

使用Intel编译器编译OpenFOAM

本文总结了使用INTEL编译器编译OpenFOAM的过程

姜蜉蝣的博客 1546

你应该知道的图片懒加载知识

v-imgLazy 使用 IntersectionObserver API实现。IntersectionObserver 对象的 observe() 方法向 IntersectionObserver 对象监听的目标集合添加一个元素。一个监听者有一组阈值和一个根, 但是可以监视多个目标元素,以查看这些目标元素可见区域的变化。简单来说可以监听dom元素进出可视区域,并且可以控制具体的变化。 具体使用请看 IntersectionObserverAPI:https://developer.mozilla.org

qq_43477721的博客 526

2024年12月 Python(四级)真题解析#中国电子学会#全国青少年软件编程等级考试

他尝试编写了如下程序,请你完善划线处的代码,计算出在h点s分放学时,三个时针分别经过3点位置的次数,用一个元组表示各指针经过3点位置的次数 (时针次数,分针次数,秒针次数) ,并输出。所谓角谷猜想,是指对于任意一个正整数,如果是奇数,则乘3加1,如果是偶数,则除以2,得到的结果再按照上述规则重复处理,最终总能够得到1。匿名函数,冒号之前表示的是这个函数的参数,冒号之后表示返回值,可以使用默认值,使用时需要将它赋值给一个变量,设置默认值不是必须,如无传入实参则使用默认值,如有传入实参则使用实参。

人生就是一个不断学习的过程 370

lazyload延迟加载组件

lazyload现在网上已经用的很多(淘宝商城,新浪微博等等),先放demo:mylazyLoad.zip 效果: <div id="redbox1" onclick="alert('js执行了')" class="redbox">点击我</div> <div class="bluebox"></div> <div...

weixin_30819163的博客 170

038、OIS 光学防抖原理与调试:陀螺仪数据融合、Lens Shift OIS 的闭环控制

本文分享了OIS光学防抖系统的调试经验和关键技术要点。作者通过一个"呼吸感"Bug案例,揭示了陀螺仪数据融合和闭环控制的重要性。系统介绍了OIS的三个关键层次:传感器层(陀螺仪特性)、控制层(复合算法)和执行层(闭环控制)。重点讲解了陀螺仪数据融合的互补滤波实现、Lens Shift闭环控制的PID优化策略(包括积分抗饱和和微分滤波),以及前馈补偿的应用。最后总结了调试中的关键问题:数据同步、霍尔校准、温度补偿和性能评估方法,并给出实用建议:平衡算法复杂度与性能、预留带宽余量、重视产线校准等。文章强调OIS

sundong_81的博客 257

深度解析大众点评反爬机制:构建高可用店铺评论采集系统(2026最新实战)

在中文互联网数据采集领域,大众点评(现归属美团)始终占据着特殊地位。其丰富的UGC(用户生成内容)包含了超过2亿条真实店铺评论、数百万家商户的详细POI信息以及用户行为数据,对商业分析、口碑监测、本地生活趋势研究具有不可替代的价值。然而,大众点评的安全团队投入了顶级资源构建反爬系统——从请求签名、行为验证到设备指纹,其防御强度甚至超过多数电商平台。本文将完整呈现一套2026年依然有效的技术方案,包括破解核心参数_token、动态代理池维护、无头浏览器指纹伪装等,最终产出一个生产级采集框架。目录。

2201_76125261的博客 811

前端性能优化——懒加载

懒加载是一种优化网页性能的技术,通过在长页面中延迟加载图片等资源,仅在用户滚动到可视区域时才加载。其特点包括减少无用资源加载、提升用户体验、降低服务器压力等。实现方式包括原生JavaScript监听滚动、HTML5的loading="lazy"属性、IntersectionObserver API,以及Vue的vue-lazyload插件。核心原理是将资源路径存储在data属性中,当元素进入视口时再赋值给src进行加载。懒加载适用于图片、视频等多种资源,能显著提升页面加载速度和性能。

哈哈哈哈哈,前端开发工程师啊 2831

内部函数方式获取工序包容盒(最低点和最高点)PTHDSP_ask_box

内部函数方式获取工序包容盒(最低点和最高点)PTHDSP_ask_box。

成长需要沉淀。 397

前端性能优化实践:深入理解懒加载的实现与最佳方案

懒加载(Lazy Load)是一种延迟加载资源的策略,只有当内容进入可视区域时才会加载所需资源。这种技术广泛应用于图片、列表数据、模块化组件等场景,能显著提升首屏加载速度和用户体验。

qq_56702171的博客 1615

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

图片懒加载的原理和实现

一,前置知识 1,为什么要图片懒加载 懒加载是一种对网页性能优化的方式,比如当访问一个页面的时候,优先显示可视区域的图片而不是一次性加载所有图片,当需要显示时,再发送图片请求,避免打开网页时加载过多资源。 当一个网站的加载图片过多时就需要懒加载的协助,页面图片多时,在首次载入时一次性加载会耗费时间长,使用懒加载可以使页面加载速度快、减轻服务器的压力、节省流量。 如下图: 随着滚轮滚动,底部的图片会被不断地加载,从而显示在页面上,也就是说懒加载其实就是按需加载,当页面需要显示图片的时候才进行加载,否则不加载

weixin_42349568的博客 1万+

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

原生js实现图片懒加载

实现图片懒加载

weixin_43435271的博客 637

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

原生JS实现图片懒加载

原理与概述 概述:如网页中需要加载N张图片,为了提升用户体验,减少用户的等待时间,兼顾加载性能。只加载当前视口的图片(也称作一屏),其余图片等用户向下滑动的时候再进行加载(滚动条向下滚动的时候)。 原理:获取用户设备当前高度,循环图片,获取其距离顶部的距离,处在第一屏的图片先加载,当滚动条发生滚动,继续加载。 html 实现 <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"&gt.

欧阳的技术博客 9985

JS | 详解图片懒加载的6种实现方案

要实现图片的懒加载,核心的方法包括:利用JavaScript监听滚动事件、通过getBoundingClientRect()判断图片是否进入可视区域、使用Intersection Observer API、结合data属性暂存图片地址。在现代浏览器中,推荐使用Intersection Observer API来实现图片的懒加载,因为它相比传统的事件监听方式更为高效且易于维护。

青春木鱼的博客 6110

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

原生 JS 实现最简单的图片懒加载 懒加载 什么是懒加载 懒加载其实就是延迟加载,是一种对网页性能优化的方式,比如当访问一个页面的时候,优先显示可视区域的图片而不一次性加载所有图片,当需要显示的时候再发送图片请求,避免打开网页时加载过多资源。 什么时候用懒加载 当页面中需要一次性载入很多图片的时候,往往都是需要用懒加载的。 懒加载原理 我们都知道HTML中的<img&g...

Jane_Serry@优快云博客 229

图片懒加载是怎么实现的?如何实现图片懒加载?

1、什么是懒加载 将图片src先赋值为一张默认图片,当用户滚动滚动条到可视区域图片的时候,再去加载后续真正的图片 2、为什么要引入懒加载 懒加载(LazyLoad)是前端优化的一种有效方式,可以减轻服务器的压力,而且可以让加载好的页面更快地呈现在用户面前(用户体验好) 3、加载实现的原理 先将img标签中的src链接设置为空,将真正的图片链接放在自定义属性(data-src),当js监听到图片元素进入到可视窗口的时候,将自定义属性中的地址存储到src中,达到懒加载的效果。 4、实现思路 如果滚动的大小和屏幕

weixin_43956521的博客 5603

js原生实现移动端图片懒加载

需求背景:做了一个图片很多的H5页面,总大小500kb左右,不想依赖插件用原生js写一个懒加载方法 <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> ...

cigailaogai8868的博客 306

原生JS实现图片懒加载(详解)————小白都能看的懂

原生JS实现图片懒加载(详解)—— 小白都能看的懂 什么是图片懒加载: 图片懒加载,通俗一点就是图片的延迟加载。它是页面性能优化的一种手段,在加载页面时通过只显示可视区域的图片,避免了页面因图片过多而使得页面加载缓慢甚至卡顿的问题。 实现的基本原理: 通过判断当前图片的【offsetTop】值,来动态添加【img】标签,设置【img】标签的【src】属性。 我们知道了什么是图片懒加载和它实现的基本...

weixin_43809685的博客 872
上一篇: CommonJS vs ES Modules,前端开发者必须掌握的5大差异与迁移策略
下一篇: 从漏洞到防护:TypeScript中XSS防御的完整实践路径(含真实案例)
CompiTide
博客等级 码龄1年 174粉丝 2175原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值