当前位置: 首页 > news >正文

Js 图片加载完成 与 图片缓存加载的区别

这两个有什么区别

 // 图片加载完成后淡入$img.on('load', function () {$img.css('opacity', '1');});// 处理图片缓存情况if ($img[0].complete) {$img.css('opacity', '1');}

要理解这两段代码的区别,需要先明确它们的核心作用场景执行时机差异—— 本质是解决 “图片加载完成后显示” 的问题,但分别覆盖了 “图片未缓存” 和 “图片已缓存” 两种不同状态,避免显示异常。以下从多个维度详细对比:

1. 核心功能与作用场景

两段代码的最终效果一致(都将图片的 opacity 设为 1,实现 “淡入显示”),但针对的图片加载状态完全不同:

代码片段核心作用针对的场景
$img.on('load', function () { ... })监听图片 “加载完成” 事件,事件触发时执行显示逻辑图片未被浏览器缓存(首次加载):此时图片需要从服务器下载,加载有延迟,必须等下载 + 渲染完成后再显示
if ($img[0].complete) { ... }主动检查图片当前是否已加载完成,若已完成则立即执行显示逻辑图片已被浏览器缓存:缓存的图片会直接从本地读取,加载速度极快,“load” 事件可能在代码绑定前就已触发,导致事件监听失效,需主动判断

2. 执行时机差异(关键区别)

这是两段代码最核心的不同,根源在于 “缓存图片的 load 事件触发时机”:

(1)load 事件监听:“被动等待”
  • 代码逻辑:给图片元素绑定一个 load 事件处理器,只有当图片真正完成加载(下载 + 渲染)时,浏览器才会触发这个事件,进而执行 opacity: 1
  • 适用场景:未缓存的图片(首次加载)。因为未缓存的图片加载需要时间,代码绑定事件时,图片还在加载中,后续加载完成后会正常触发 load 事件。
  • 问题:如果图片已缓存(本地直接读取),加载会在瞬间完成 —— 可能在代码绑定 load 事件之前就已经加载完成,此时 load 事件永远不会触发,图片会一直处于透明状态(opacity: 0)。
(2)complete 属性检查:“主动兜底”
  • 代码逻辑:$img[0] 是从 jQuery 对象($img)中获取的原生 DOM 元素,原生图片 DOM 有一个 complete 属性:
    • 若图片已完全加载(无论是否缓存),complete 为 true
    • 若图片正在加载或加载失败,complete 为 false
  • 作用:专门解决 “缓存图片 load 事件不触发” 的问题 —— 代码执行时,主动检查图片是否已加载完成,若已完成(complete: true),则直接设置 opacity: 1,无需等待 load 事件。
  • 本质:是对 load 事件的 “兜底逻辑”,确保两种加载状态(缓存 / 未缓存)下图片都能正常显示。

3. 总结:为何需要同时写两段代码?

单独使用任何一段都会有问题:

  • 只写 load 事件:缓存图片因 load 事件未触发,会一直透明;
  • 只写 complete 检查:未缓存图片因加载未完成(complete: false),会一直透明,直到加载完成后也不会再显示。

两段代码结合后,形成 “全覆盖逻辑”:

  1. 对于未缓存图片complete 为 false,不执行即时显示;后续加载完成后,load 事件触发,执行显示;
  2. 对于已缓存图片complete 为 true,立即执行显示;无需依赖 load 事件。

最终实现 “无论图片是否缓存,加载完成后都能正常淡入显示” 的效果。


文章转载自:

http://qTgzcLTJ.xpzgg.cn
http://rzNv4bzO.xpzgg.cn
http://ED71xo6r.xpzgg.cn
http://YGfUfOBO.xpzgg.cn
http://CStQlngD.xpzgg.cn
http://C8oBI73z.xpzgg.cn
http://qcxhayJu.xpzgg.cn
http://2iScmB4E.xpzgg.cn
http://PzfdL1HN.xpzgg.cn
http://Z2m8Sxso.xpzgg.cn
http://5JtOUzTB.xpzgg.cn
http://HCdXXh9b.xpzgg.cn
http://Y3uWKh1k.xpzgg.cn
http://KmZgxGKY.xpzgg.cn
http://bFTqdLUk.xpzgg.cn
http://vkSHLHuS.xpzgg.cn
http://UsvErY08.xpzgg.cn
http://9ArTiJoU.xpzgg.cn
http://MGcQANZW.xpzgg.cn
http://7z3ZqXJK.xpzgg.cn
http://ojrL5IVv.xpzgg.cn
http://AnKJhvGz.xpzgg.cn
http://UArMIzYz.xpzgg.cn
http://3Oowi0R3.xpzgg.cn
http://Zg4SkVWL.xpzgg.cn
http://bbpQEIdd.xpzgg.cn
http://275S9iKh.xpzgg.cn
http://1KMdG9wQ.xpzgg.cn
http://b7h8zsD2.xpzgg.cn
http://1BYahak2.xpzgg.cn
http://www.dtcms.com/a/377467.html

相关文章:

  • 汽车动力电池管理系统(BMS):电动汽车的“智能大脑”
  • n8n add npm module 發生 Module ‘ioredis‘ is disallowed,getaddrinfo EAI_AGAIN
  • 性能——day3
  • 安卓学习 之 SeekBar(音视频播放进度条)
  • CRMEB标准版PHP订单列表功能详解与优化技巧
  • Linux基础知识(五)
  • [数据结构——lesson7.队列]
  • 在算法竞赛中怎样正确的分析一个程序的时间复杂度
  • ES6笔记4
  • 实现一个动态顺序表(C++)
  • 10 分钟上手 ECharts:从“能跑”到“生产级”的完整踩坑之旅
  • Decode Global新官网上线披露核心数据
  • 【Redis】Scan 命令使用教程:高效遍历海量数据
  • 深度解析:抗辐射电源芯片 ASP4644S2B 在空间环境中的单粒子效应表现
  • 多链冷换仓攻略:如何在 Solana、BSC 与 Base 隐身管理资产
  • 【博弈论和SG函数 | 那忘算10】巴什博奕 尼姆博弈及其变种 威佐夫博弈(附例题)
  • Cubemx+Fatfs(解决挂载Fatfs失败的问题)
  • UVa1063/LA3807 Marble Game
  • leetcode LCR 170.交易逆序对的总数
  • 【学习笔记】Https证书如何升级到国密
  • 期权行权期限一般多久?
  • 0基础Java学习过程记录——枚举、注解
  • 【C++】C++ 内存管理
  • C++ STL之list的使用
  • Midjourney绘画创作入门操作创作(宣传创意)
  • 【数据库约束】
  • 小白成长之路-centos7部署ceph存储
  • python学习进阶之面向对象(二)
  • 【芯片设计-信号完整性 SI 学习 1.1.1 -- Unit Interval,比特周期】
  • sudo apt update sudo apt upgrade -y 两个命令的作用