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://www.pswp.cn/web/96250.shtml
繁体地址,请注明出处:http://hk.pswp.cn/web/96250.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

国产化PDF处理控件Spire.PDF教程:如何在 Java 中通过模板生成 PDF

在企业级应用开发中,生成 PDF 文档是一项非常常见的需求。无论是发票、报告、合同,还是其他业务文档,开发人员通常都需要一种高效、稳定的方式来创建 PDF。与其逐行绘制 PDF 内容,不如直接利用 模板 ——常见的模板形式包括 HTML …

Spring Cloud Gateway WebFlux现cvss10分高危漏洞,可导致环境属性篡改

漏洞概述Spring官方披露了Spring Cloud Gateway Server WebFlux组件中存在一个高危漏洞(编号CVE-2025-41243),该漏洞在特定配置下允许攻击者篡改Spring环境属性。该漏洞已获得CVSS 10.0的最高严重性评级。根据安全公告,该漏洞被描…

嵌入式 SQLite 数据库开发笔记

嵌入式 SQLite 数据库开发入门笔记在嵌入式开发中,数据存储与管理是不可或缺的环节。对于资源有限的系统,轻量级数据库 SQLite 是一个非常理想的选择。它无需独立服务进程,直接嵌入到应用中即可使用,既能满足数据持久化需求&#…

Spark面试题及详细答案100道(71-80)-- 配置与部署

《前后端面试题》专栏集合了前后端各个知识模块的面试题,包括html,javascript,css,vue,react,java,Openlayers,leaflet,cesium,mapboxGL,threejs&…

Redis 面试

1、主从集群1、构建主从集群单节点Redis的并发能力是有上限的,要进一步提高Redis的并发能力,就需要搭建主从集群,实现读写分离。主写从读,主可以读也可以写,从只能读利用docker-compose文件来构建主从集群:…

如何使用PostgreSQL数据库进行数据挖掘与预测分析

如何使用PostgreSQL数据库进行数据挖掘与预测分析 关键词:PostgreSQL,数据挖掘,预测分析,数据库,机器学习 摘要:本文旨在深入探讨如何利用PostgreSQL数据库进行数据挖掘与预测分析。首先介绍了使用PostgreSQL进行此类操作的背景信息,包括目的、预期读者、文档结构等。接…

ZooKeeper vs Redis:分布式锁的实现与选型指南

一、Redis 分布式锁:追求极致的性能 Redis 分布式锁基于内存操作,其核心思想是在内存中设置一个唯一的键值对来表示锁的持有。 1. 基础实现(SETNX Lua) 最简单的实现是使用 SETNX(SET if Not eXists)命令&…

vue基于Springboot框架的考研咨询平台系统实现

目录前言-本系统介绍已开发项目效果实现截图开发技术详细介绍核心代码参考示例1.建立用户稀疏矩阵,用于用户相似度计算【相似度矩阵】2.计算目标用户与其他用户的相似度系统测试总结源码获取详细视频演示或者查看其他版本:文章底部获取博主联系方式&…

苹果用户速更新!macOS存严重漏洞,用户隐私数据面临泄露风险

漏洞概况近日,macOS系统发现一个CVSS评分高达 9.8 的高危漏洞,该漏洞可能允许应用程序绕过系统保护机制,非法访问受保护的用户数据。该漏洞编号为 CVE-2025-24204,目前已有概念验证(PoC)代码公开。漏洞影响…

海盗王64位dx9客户端修改篇之五

在海盗王3.0客户都升级64位dx9版本的过程中,因为特效的问题,被卡壳了很久。 开始是精灵草的粒子效果、白银城的烟囱烟雾效果、篝火的效果、阳光透射效果、海浪效果等,修了很长的时间,才找到窍门弄好。 然后是精灵效果、角色阴影。…

Linux学习——管理网络安全(二十一)

一、管理服务器防火墙(firewalld)RHEL 默认使用 firewalld 作为防火墙管理工具,它通过 “区域(zone)” 和 “服务(service)” 的概念简化规则配置,支持动态更新规则而无需重启服务。…

leetcode-python-1941检查是否所有字符出现次数相同

题目: 给你一个字符串 s ,如果 s 是一个 好 字符串,请你返回 true ,否则请返回 false 。 如果 s 中出现过的 所有 字符的出现次数 相同 ,那么我们称字符串 s 是 好 字符串。 示例 1: 输入:s “…

Snort的介绍

当然可以。以下是对 Snort 的全面介绍,涵盖其定义、核心功能、三种运行模式、工作原理、规则系统以及应用场景等内容。 Snort 网络入侵检测系统(NIDS)详解 一、Snort 简介 Snort 是一款开源的、轻量级但功能强大的 网络入侵检测与防御系统&…

滴滴二面准备(一)

结合你的简历内容和技术面试问题,以下是一个结构化的回答建议,突出你的技术深度和项目经验:2. 项目与实习经历 得物低代码落地页编辑器(核心项目) 背景:解决软广落地页开发周期长、迭代慢问题。技术方案&am…

socket通信在Windows和Linux上的区别

前言 笔者在将socket通信的自定义类从Linux移植到Windows时遇到一些问题&#xff0c;整理下来希望帮助到需要的人&#xff0c;同时也加深自己的理解。 差异 头文件 #ifdef _WIN32 #include <ws2tcpip.h> #define inet_pton InetPton #define SHUT_RDWR SD_BOTH #define M…

一款将PDF转化为机器可读格式的工具介绍

ps:以下内容来自MinerU项目 MinerU 项目简介 MinerU是一款将PDF转化为机器可读格式的工具&#xff08;如markdown、json&#xff09;&#xff0c;可以很方便地抽取为任意格式。 MinerU诞生于书生-浦语的预训练过程中&#xff0c;我们将会集中精力解决科技文献中的符号转化问…

代码随想录算法训练营第三十九天|62.不同路径 63.不同路径ll

62.不同路径&#xff1a; 文档讲解&#xff1a;代码随想录|62.不同路径 视频讲解&#xff1a;https://www.bilibili.com/video/BV1ve4y1x7Eu 状态&#xff1a;已做出 一、题目要求&#xff1a; 一个二维数组里&#xff0c;将(0&#xff0c;0)位置下标作为起点&#xff0c;计算…

openEuler2403安装部署Prometheus和Grafana

文章目录openEuler2403安装部署Prometheus和Grafana一、前言1.简介2.环境二、正文1.环境准备1&#xff09;JDK 安装部署&#xff08;可选&#xff09;2&#xff09;关闭防火墙2.安装 Prometheus1&#xff09;下载和安装2&#xff09;启动3&#xff09;systemd服务管理3.安装 Gr…

乐吾乐大屏可视化组态软件【SQL数据源】

乐吾乐大屏可视化组态软件&#xff08;大屏可视化设计器 - 乐吾乐Le5le&#xff09;支持直接对接SQL数据源功能&#xff0c;目前仅对企业源码客户开放。 配置SQL数据源 管理员进入可视化管理中心&#xff0c;点击SQL数据源&#xff0c;配置添加SQL数据源。 创建SQL数据源连接 …

Django高效查询:values_list实战详解

Django 实战案例 讲解 values_list 的用法。 values_list("field", flatTrue) → 获取单字段的一维列表。values_list("f1", "f2") → 获取多个字段&#xff0c;返回元组。搭配 filter / distinct / in / 外键查询 非常高效。适合用于 导出数据 …