IntersectionObserver图片懒加载及用户体验优化

HOW - 优化回流频繁导致的性能开销 从重绘和回流的定义来看,回流是性能开销比较大的场景,而且对于会频繁触发回流的页面,性能问题更明显,导致降低渲染速度,从而出现卡顿。 阅读详情

前提

熟知的图片懒加载的方式是使用getBoundingClientRect函数判断是否在可视区域内,但是调用这个函数会引起回流,影响浏览器性能。可替代的方式是使用IntersectionObserver对象,使用方式参考IntersectionObserver API 使用教程——阮一峰
关于回流,参考前端优化总结

正题

先看效果:

模拟图片加载堵塞的情况,图片到达可视区域2s后才加载出图片,在图片加载出来之前鼠标移动到图片上时可显示图片描述文字
请添加图片描述

上代码:

原理:<img alt='xxx'>是非替换元素,而加上src属性后变为替换元素,替换元素的::before/after是无效的,所以能在图片加载出来后隐藏掉文字描述
关于替换元素,参考CSS替换元素和非替换元素

//html:
    <!-- 模拟懒加载 -->
    <div style="height: 120vh;"></div>
    <img id="img" alt="虎豹">
//CSS:
		img {
            /* <img>元素表现为内联元素样式 */
            display: block;
            width: 400px;
            height: 300px;
            outline: 1px solid sandybrown;
            margin: 0 auto;
            position: relative;
            overflow: hidden;
        }

        img::after {
            content: attr(alt);
            position: absolute;
            bottom: 0;
            left: 0;
            /* 让文字描述部分溢出图片显示区域并隐藏 */
            transform: translateY(100%);
            background-color: rgba(0, 0, 0, 0.4);
            width: 100%;
            height: 40px;
            /* 垂直水平居中 */
            text-align: center;
            line-height: 40px;
            transition: .5s ease;
        }

        img:hover::after {
            /* hover状态下文字描述部分上浮出来 */
            transform: translateY(0);
        }

//js:
  //图片懒加载:到达可视区域才加载
    let observer = new IntersectionObserver(entries => {
        if (entries[0].intersectionRatio <= 0) return;
        //模拟图片加载时间,2s后图片显示出来
        setTimeout(() => {
            let img = entries[0].target
            img.src = './assets/bao.jpg'
        }, 2000);
    })
    observer.observe(document.getElementById('img'))

参考《CSS世界》-张鑫旭

YOLO26 FP16/INT8混合量化实战:精度无损+速度拉满,边缘设备部署最优解 这是混合量化的灵魂,告诉量化器:哪些层不准动,保留FP16。"""判断是否为量化敏感层 → 是则豁免为FP16返回 True=敏感层(FP16),False=可量化(INT8)"""# 1. 检测头回归分支# 2. 小通道1×1卷积# 3. SiLU 激活# 4. 残差ShortcutYOLO26想要在Jetson、RK3588、昇腾、嵌入式NPU上真正落地,FP16/INT8混合量化是唯一最优解。它的核心逻辑不是玄学,而是工程上的精准取舍能量化的层,全部INT8榨性能; 阅读详情

相关推荐

从SPICE到电磁场:非线性器件在CST场路协同仿真中的建模艺术

本文深入探讨了非线性器件在CST场路协同仿真中的建模技术,重点分析了SPICE模型与电磁场仿真的集成方法。通过对比线电流模型和面电流模型的优缺点,结合实际案例展示了二极管阵列在电磁散射调控中的应用,为工程师提供了优化仿真精度与效率的实用技巧。

pandas7gardener的博客 198

前端性能优化小结

前言 移动互联网时代,用户对于网页的打开速度要求越来越高。首屏作为直面用户的第一屏,其重要性不言而喻。优化用户体验更是我们前端开发非常需要 focus 的东西之一。 从用户的角度而言,当打开一个网页,往往关心的是从输入完网页地址后到最后展现完整页面这个过程需要的时间,这个时间越短,用户体验越好。所以作为网页的开发者,就从输入url到页面渲染呈现这个过程中去提升网页的性能。 所以输入URL后发生了什么呢?在浏览器中输入url会经历域名解析、建立TCP连接、发送http请求、资源解析等步骤。 http缓存优化是

面对疾风吧 1150

论文地图合规求生指南:5分钟搞定标准地图服务转ArcGIS可用矢量文件

本文提供了一份论文地图合规求生指南,帮助非GIS专业背景的科研人员在5分钟内将标准地图服务的EPS文件转换为ArcGIS兼容的矢量文件。通过详细的工作流程和关键参数设置,确保地图完全符合国家规范,同时节省时间成本。重点关注标准地图服务的合规性和Shapefile转换技巧,适用于紧急情况下的论文地图处理。

weixin_34233974的博客 402

getBoundingClientRect函数获取视图位置的坑

最近在做一个功能,把新手引导的提示定位在申请的上方,申请的位置是会根据前面功能的不展示而向前移动的,所以位置是不固定的,因此新手引导的位置要根据申请元素的位置来定位。 我使用了getBoundingClientRect函数来获取申请dom元素距离视图的距离。 getTypeHighLightDom(item) { const dom = document.querySelector(item.selector); let domLocal; ...

YICONGITSME的博客 6796

25个Prompt去除AI味,让AI写作更像真人

自然语言生成技术飞速发展,如今AI写作已经深度融入内容创作、营销运营和日常办公。但许多用户发现,AI生成的文本常常带着一股“AI味”——句子过于工整、过度总结、细节空洞,导致内容被一眼识破,甚至面临“AI率”过高的尴尬。其实,这种塑料感源于大模型的训练数据与对齐机制,它偏好生成结构完整、逻辑平滑的“安全文本”。要解决这一问题,核心不在于更换工具或复杂调参,而在于掌握提示词工程的底层逻辑:通过限制结构、注入细节、切换视角、打乱顺序等具体指令,引导模型生成更接近人类表达习惯的文本。本文基于实战经验,提供25个可

weixin_26824299的博客 258

Linux单独编译设备树,开发者分享 | Petalinux 工程中设备树的介绍

本文来自XILINX嵌入式产品应用工程师 Terry Ni设备树是 Petalinux kernel 的关键组件,接下来以 2020.1 版本为例,为大家介绍一下在Xilinx Petalinux 工程中的设备树是如何产生,配置以及修改的。Petalinux 工程中设备树的位置当我们创建了一个 petalinux 工程后(以zcu102为例),在编译的时候,会自动生成对应的设备树文件。这些设备树的...

weixin_28877107的博客 2578

JS | 元素视图方法之getBoundingClientRect()方法详解,秒懂!

在前端开发过程中,我们经常需要获取HTML元素的尺寸和位置信息。getBoundingClientRect()方法就是一个非常重要的工具,它可以帮助我们获取元素的大小及其相对于视口的位置。

青春木鱼的博客 1万+

SKUA-GOCAD入门教程-第六节

DisplayElements窗口是用于浏览和处理项目数据的工具,包含多个数据浏览器,如模型列表、对象、未分类对象、属性数据及资源数据。

江洋大葱的博客 983

js中getBoundingClientRect的作用及兼容方案详解

1、getBoundingClientRect的作用 getBoundingClientRect用于获取某个html元素相对于视窗的位置集合。 执行 object.getBoundingClientRect();会得到元素的top、right、bottom、left、width、height属性,这些属性以一个对象的方式返回。 getBoundingClientRect() 这个方法返回一个矩形...

weixin_45842655的博客 2052

IEC61850规约客户端软件开发实战(第六章)

IEC 61850标准中的GOOSE(Generic Object Oriented Substation Event,面向通用对象的变电站事件)功能是变电站自动化系统的核心通信机制,主要用于实现智能电子设备(IED)间高可靠性、低延时的实时信号传输。本章简述其核心功能与技术特点。

半青年的博客 1777

【专栏必读】王道考研408计算机组成原理万字笔记使用说明及章节导航

本文是为准备408王道计算机组成原理考试的学生精心整理的万字笔记,涵盖了从计算机系统概述、数据表示和运算到存储系统、指令系统等多个章节的重点内容。本文强调了学习笔记的重要性,并分享了学习建议,如按视频课逻辑记录,建立学科框架。笔记详细记录了每章的关键知识点,包括存储器、CPU、I/O系统的工作原理,还附带了习题和思维导图,旨在帮助考生高效复习。

快乐江湖的博客 9万+

new IntersectionObserver() 使用实现图片懒加载

<!DOCTYPE HTML> <html> <head> <meta charset="utf-8"> <meta name="apple-mobile-web-app-capable" content="yes" /> <meta name="viewport" content="width=devic...

夜惊如水 835

最新Python爬虫实战(入门爬虫篇)——案例15:微博热搜数据采集(详细爬虫思路截图+抓包动图演示+完整爬虫代码+详细注释)

本次案例通过 Python 爬虫技术,成功实现了对微博热搜 API 接口数据的批量爬取与 Excel 保存。代码采用模块化设计,包含接口请求、JSON 解析、数据提取、Excel 持久化等完整流程;通过模拟真实浏览器的请求头和 cookies,有效规避基础反爬策略,保证请求的稳定性。整个爬虫逻辑遵循“API请求 → JSON解析 → 数据提取 → 保存到Excel”的标准流程,与异步加载类网站的爬取范式高度一致。AJAX 接口抓包与分析。

努力让自己发光,对的人才能迎着光而来 7万+

IntersectionObserver Api 实现图片懒加载

IntersectionObserver Api 实现图片懒加载。

weixin_51679573的博客 264

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

微信小程序实现图片懒加载的4种方案

可以创建一个自定义组件,将图片的 URL 和是否显示图片的状态封装在组件内部,然后在页面中使用自定义组件来实现图片的懒加载。创建一个自定义组件,例如lazy-image。在自定义组件的 WXML 文件中,使用 image 组件来显示图片,并使用 wx:if 条件渲染来判断图片是否需要显示。

笔记、经验、日常分享 6319

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

电商网站如何用IntersectionObserver提升用户体验

最近在优化电商平台的前端性能时,发现IntersectionObserver这个API真的帮了大忙。它的实时预览功能让我可以立即看到IntersectionObserver的效果,而一键部署则方便我把优化后的页面分享给团队其他成员测试。这样实现不仅代码简洁,而且性能更好,因为IntersectionObserver是异步执行的,不会阻塞主线程。如果你也在做电商网站的性能优化,不妨试试IntersectionObserver这个强大的API,配合。的便捷功能,可以快速实现并验证各种优化方案。

EmeraldWolf23的博客 380

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

图片懒加载

摘自:https://juejin.im/post/5bbc60e8f265da0af609cd04#heading-2 前言 图片懒加载在一些图片密集型的网站中运用比较多,通过图片懒加载可以让一些不可视的图片不去加载,避免一次性加载过多的图片导致请求阻塞(浏览器一般对同一域名下的并发请求的连接数有限制),这样就可以提高网站的加载速度,提高用户体验。 效果预览 如何...

aozhuyi4028的博客 307

图片懒加载的方案

图片懒加载的方案

JackChan 1147

实现图片懒加载(及优化相关)

工作之余想要休闲一下(看-美-女-图),但是又觉得单纯休闲不利于自身进步,于是 ……

cai niaoyihao_的博客 1733

IntersectionObserver API实现图片懒加载、无限滚动

可以用来自动监听元素是否进入了设备的可视区域之内,而不需要频繁的计算来做这个判断。由于可见(visible)的本质是,目标元素与视口产生一个交叉区,所以这个 API 叫做"交叉观察器"该方法不需要接收参数,返回所有被观察的对象,返回值是一个数组。// 当loding区的dom元素为可视化时,调用加载函数。目标元素的可见性发生变化时,就会调用观察器的回调函数。// 获取展示区 和 loding区的dom元素。// 获取内容区 和 loding区的dom元素。// 想要延迟,可以添加定时器,延迟渲染出数据。

llllllhy_的博客 1891

前端懒加载的N种玩法分享(技术进阶)

今日寄语: 生活嘛, 慢慢来, 你又不差. 前言性能优化系列文章又更新啦,这次主要是和小伙伴们来介绍一下懒加载以及相关的玩法。懒加载是前端性能优化中很重要的一环,可以有效地降低首页的白屏时间,并且可以广泛地应用到小伙伴们的项目中。提到懒加载,前端的小伙伴们通常的第一想法就是图片的懒加载啦。哈哈哈,其实懒加载并不止局限于图片懒加载,它也是有很多的应用场景。别着急,咱们一个一个的来介绍。im...

趣谈前端 1584

react移动端axios实现图片懒加载

React移动端axios实现图片懒加载 在移动端网页开发中,图片懒加载是一种常见的优化方式,能够加快页面加载速度,提升用户体验。本文将介绍如何使用React和axios实现图片懒加载的功能。 什么是图片懒加载 图片懒加载是指在页面滚动时,只加载可见区域的图片,而不是一次性加载所有图片。这样可以减少页面的加载时间和带宽消耗...

weixin_40971481的博客 182

原来懒加载有这些玩法,你确定不看看?

介绍一下懒加载以及相关的玩法。大厂技术高级前端Node进阶 点击上方程序员成长指北,关注公众号 回复1,加入高级Node交流群前言懒加载是前端性能优化中很重要的一环,可以有效地降低首页的白屏时间,并且可以广泛地应用到小伙伴们的项目中。提到懒加载,前端的小伙伴们通常的第一想法就是图片的懒加载啦。哈哈哈,其实懒加载并不止局限于图片懒加载,它也是有很多的应用场景。别着急,咱们一个一个的来介绍。...

程序员成长指北 212

进行浏览器原生的图片懒加载的几种方式和原理

前言   对于图片较多的网站,倘若一次性加载所有图片,一方面由于同时加载的图片较多,页面的DOM元素将非常多,会造成页面卡顿性能严重下降,另外服务器的压力也会很大。另一方面若加载了很多图片,而用户浏览的图片仅有几张,将会耗费大量流量,造成浪费。   而懒加载就是针对此情况做的优化,同时会极大地提升用户体验。一句话总结就是,懒加载即延时加载,当图片要用到的时候再去加载。 offsetTop   懒加载的图片一般是固定宽高的,为避免图片较大时拉伸,可运用object-fit: cover来裁剪。 <st.

无 1679

图片img懒加载实现原理方案懒加载优化用户体验

图片懒加载 文章目录图片懒加载懒加载优点实现关键逻辑:代码实现用户体验推荐插件最后感谢 在网站开发中,经常有一些页面需要加载大量图片,所以会有大量图片请求,性能优化之一就有较少网络请求要求,所以为了减轻浏览器负担,我们需要根据用户可视区域视角,内的图片才发起请求,在网页末尾端底部的图片,用户是还看不到的,所以暂时没有必要网络请求; 懒加载优点 减轻浏览器负担,让内存先完成必须的工作 减少网络请求 较少并行时大量流量 实现关键逻辑: 可视区域高度 window.innerHeight img到顶部高

黄钟飞的博客 1660

JavaScript API 之 IntersectionObserver实现无限滚动、懒加载

IntersectionObserver 是一种 JavaScript API,它提供了一种异步监测元素与其祖先容器或视口之间交叉状态的方法。简单来说,它可以告诉我们一个元素是否进入了视口或者与其祖先容器发生了交叉。通过 IntersectionObserver,我们可以轻松地监听目标元素的可见性变化,进而根据这些变化来实现各种交互效果,比如懒加载图片、实现无限滚动等功能。相较于传统的事件监听方式,IntersectionObserver 更高效、灵活,可以提供更好的用户体验和性能优化。

ufrontend的博客 1650
上一篇: css实现三个点加载中的效果
下一篇: CSS替换元素和非替换元素
风兮w
博客等级 码龄9年 51粉丝 110原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值