使用Intersection Observer接口实现图片懒加载

接上上一篇使用Intersection Observer接口实现分页加载,再用这个接口实现图片懒加载

为img添加自定义属性data-src存储真实的图片地址,等到下拉达到可视区域位置,即isIntersecting为true时就将真实地址赋给src,没有到达则图片地址为默认图片

未达到可视区域,src为默认图片

请添加图片描述

达到可视区域后,src为真实图片地址

请添加图片描述

自定义HOOK—useImgHook.js

import { useEffect } from 'react'

/**
 * 1,监听图片是否进入可视区域;
 * 2,将src属性的值替换为真实的图片地址 --- data-src
 * 3,停止监听当前的节点
 * @param {*} ele 
 * @param {*} callback 
 * @param {*} watch 
 */
let observer;
export default function useImgHook(ele, callback, watch) {
    useEffect(() => {
    	//目标元素
        const nodes = document.querySelectorAll(ele)
        if (nodes && nodes.length) {
            observer = new IntersectionObserver((entries) => {
                callback && callback(entries)
                entries.forEach(item => {
                    // console.log(item);
                    if (item.isIntersecting) {
                        const data_src = item.target.getAttribute('data-src')
                        //赋值
                        item.target.setAttribute('src', data_src)
                        //停止监听目标元素
                        observer.unobserve(item.target)
                    }
                })
            })
            nodes.forEach(item => {
                observer.observe(item)

            })

            return () => {
                // 停止监听
                if (nodes && nodes.length && observer) {
                    observer.disconnect()
                }
            }
        }
    }, watch)
}

使用useImgHook

import { useImgHook } from "@/hook/index.js";
...
// 图片懒加载
useImgHook('.item-img', (entries) => { }, null)
...
{houseList.map((item) => (
    <div className='item' key={item.id} >
    	...
        <img alt='img' className='item-img' data-src={item.img} src={require('../../assets/img/blank.png')} />
        ...
    </div>
))}

更多文章可访问 博客

白菜汤里的胡萝卜
关注 关注
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
IntersectionObserver实现图片懒加载(超详细!)
Deku_Ln的博客
12-07 3488
关于IntersectionObserver 官方上说明是提供了一种异步观察目标元素与其祖先元素或顶级文档视窗(viewport)交叉状态的方法。祖先元素与视窗(viewport)被称为根(root)。 具体的内容可以参考官网解释:https://developer.mozilla.org/zh-CN/docs/Web/API/IntersectionObserver 这里我们主要来用IntersectionObserve实现图片的懒加载。 <!DOCTYPE html> <.
JS实现页面数据懒加载
10-15
本文主要介绍了使用JavaScript实现页面数据的懒...实现懒加载有多种方法,如通过滚动事件监听和Intersection Observer API等,开发者应根据实际项目需求选择合适的方法,并不断探索与实践以达到最佳的性能优化效果。
懒加载神器——Intersection Observer
qq_44327851的博客
09-13 588
懒加载是一种独特而又强大的数据获取方式,它能够在用户滚动页面的时候自动获取更多的数据,而得到的新的数据不会影响原有的数据的显示,同时最大程减少服务器端的资源耗用。简单来说,懒加载就是延迟加载,按需加载,当对象要用到的时候再去加载相关的对象,在长网页中延迟加载数据,是一种比较好的网页性能优化方式。该构造函数接收两个参数。其实从上面两点就能很好的看出来,懒加载最常运用到的地方就是图片等资源的的加载了,特别是当图片的资源过大的时候。当我在看到懒加载的需求的时候就在想是否有更好的方法,在DOM API找到了。
Intersection Observer API 实现图片懒加载
最新发布
weixin_41209752的博客
07-23 19
Intersection Observer API 实现图片懒加载 1,为需要延迟加载的图片设置data-src属性。登录后复制 <img src="" data-src="image.jpg" alt="图片">1.2,使用Intersection Observe...
Intersection Observer实现图片懒加载
廊坊吴彦祖
11-16 596
Intersection Observer实现图片懒加载 Intersection Observer 的概念和用法 Intersection Observer API提供了一种异步检测目标元素与祖先元素或 viewport 相交情况变化的方法,可以自动“观察”元素是否可见,可见的本质是目标元素与视口产生一个交叉区域,所以这个 API 叫做“交叉观察器” Intersection Observer API 允许你配置一个回调函数,每当目标(target)元素与设备视窗或者其他指定元素发生交集的时候执行。设备视
IntersectionObserve初试
weixin_33753003的博客
02-28 177
IntersectionObserve这个API,可能知道的人并不多(我也是最近才知道...),这个API可以很方便的监听元素是否进入了可视区域。 &lt;style&gt; * { margin: 0; padding: 0; } .test { width: 200px; height: 1000px; back...
intersectionObserver实现懒加载
StarFlll的博客
08-02 764
new intersectionObserver方法运用 createDocumentfragment方法运用 学习笔记
谈谈IntersectionObserver懒加载的具体使用
12-13
总之,IntersectionObserver API 提供了一种优雅的方式,用于监听页面元素的可视状态,从而实现懒加载等优化技术,提高网页的加载速度和用户体验。开发者可以通过自定义配置和回调处理,实现更精细的页面资源管理,...
DIV懒加载demo
06-26
"DIV懒加载demo"是一个关于如何实现非图片元素(如div)的懒加载技术实例,它模仿了天猫和京东等电商平台的滚动加载效果。这个示例旨在帮助开发者优化网页性能,特别是对于数据量大、内容丰富的页面。 首先,我们要...
IntersectionObserver实现元素懒加载的实战解析
IntersectionObserver是HTML5提供的一种强大的API,用于实现懒加载(lazy loading)功能,特别是在处理大量图片或内容时,提高页面性能和用户体验。该接口允许开发人员异步监听目标元素(如图片、视频等)与其祖先...
HTML延迟加载图片 html图片延迟加载技术大全.zip
01-09
2. **jQuery LazyLoad插件**:这是一个流行的jQuery插件,它提供了简单易用的接口实现图片的懒加载。通过`$(window).lazyload()`方法,配合适当的配置选项,可以轻松实现图片延迟加载。 3. **Intersection ...
图片懒加载(IntersectionObserver)
weixin_34162401的博客
03-26 204
scroll实现 上次我们聊到的是throttle和debounce去实现 实现图片懒加载(throttle, debounce) 不过,就算throttle和debounce是实现图片懒加载,但是scroll事件密集发生,计算量很大,容易造成性能问题。 IntersectionObserver 这api主要负责监听元素和"视口"(viewport)的关系,我就不多讲述了 API Inters...
intersectionobserver API实现懒加载
qq_39193364的博客
09-13 209
用法 var io = new IntersectionObserver(callback, option) 参数: callback参数 time:可见性发生变化的时间,是一个高精度时间戳,单位为毫秒 target:被观察的目标元素,是一个 DOM 节点对象 rootBounds:根元素的矩形区域的信息,getBoundingClientRect()方法的返回值,如果没有根元素(即直接相对于视口滚动),则返回null boundingClientRect:目标元素的矩形区域的信息 intersec.
IntersectionObserver实现图片懒加载
weixin_30751947的博客
09-28 77
API: https://developer.mozilla.org/en-US/docs/Web/API/Intersection_Observer_API 直接上源码: <!DOCTYPE html> <html> <header> <style> .list-item{ ...
Intersection Observer Api 实现图片懒加载和上划加载更多.
qq_54753561的博客
02-08 1058
目前有一个新的 API 叫 IntersectionObserver (交叉观察器) 可以自动"观察"元素是否可见,可见的本质是,目标元素与视口产生一个交叉区,所以这个 API 叫做"交叉观察器"。Chrome 51+ 已经支持。实现图片懒加载和上划加载更多
Intersection Observer API 图片懒加载、无限滚动、视口交叉
zgwnDong的博客
11-01 137
【代码】Intersection Observer API 图片懒加载、无限滚动、视口交叉。
通过IntersectionObserver实现图片懒加载功能
2301_78223700的博客
07-19 454
图片懒加载是日常开发会经常使用的一个功能,但是在日常中可能使用v-lazy便直接实现图片懒加载,现在想通过原生js来实现一下图片懒加载的功能.首先来介绍一下,这个在中有十分详细的介绍.可以直接去看原文.这里简单介绍一下他的用法.
Vue自定义指令实现图片懒加载详解
以下是一个简单的Vue自定义指令实现懒加载的示例代码片段: ```javascript Vue.directive('lazy', { bind: function (el, binding, vnode) { const observer = new IntersectionObserver((entries, observer) => ...
写文章

热门文章

  • esp32 + tft +分光棱镜 透明小电视笔记 8373
  • openCV配置 4499
  • 短视频短剧小程序搭建支持抖音快手百度微信h5端源码+教程 3650
  • esp8266开源小电视制作记录 3316
  • 用友U8软件远程安装u8v10.1会计电算化ERP系统学生机房版 2880

分类专栏

  • php 1篇

最新评论

  • 【安全防封技术】微信QQ域名防红源码 微信打赏域名防红 微信爆红 微信域名防屏蔽

    華CG: 有没有人用过,吱个声,有没有用

  • 【安全防封技术】微信QQ域名防红源码 微信打赏域名防红 微信爆红 微信域名防屏蔽

    普通网友: 阅读这篇博文真是一次愉快的体验!作者的文字真是动人心弦,语言精准而生动。【我也写了一些相关领域的文章,希望能够得到博主的指导,共同进步!】

  • 苹果CMS最新Dplay弹幕播放器插件【站长亲测】

    乌鸦坐滴滴: 表情包表情包通用弹幕库地址表情包表情包表情包表情包表情包表情包 https://bbj.icu/api/danmuTong.html表情包表情包表情包表情包表情包表情包表情包表情包表情包表情包表情包表情包

  • 用友U8软件远程安装u8v10.1会计电算化ERP系统学生机房版

    linlinaichifan: 为啥点开【SQLserver2005_BC_x64.msi】还有很多东西要选择昂,有友友知道如何选择才可以通过最后的环境检测吗

最新文章

  • 基于python-flask技术的社区信息交流平台【数据库+15000文档】
  • 【安全防封技术】微信QQ域名防红源码 微信打赏域名防红 微信爆红 微信域名防屏蔽
  • 音乐网站首页单页html+css+js
2024年18篇
2023年12篇
2022年10篇
2021年1篇

目录

目录

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值

深圳坪山网站建设公司西安集团网站优化开发物流网站如何优化首页天下网不同网站怎么优化成都网页优化网站优化网站优化主要做什么铁岭网站优化深圳南山区网站seo优化排名点击宝优化网站网站设计优化设计公司网站优化传播三沙清镇网站优化云浮营销型网站优化方案网站的优化不包括什么佛山网站优化知识太原网站专题优化网站推广之站外优化冷水滩区网站seo优化排名网站搜索排名优化怎么收费新区网站优化牡丹江口碑好的企业网站优化怎么对一个网站进行优化保税区网站优化价格优化网站搜索排名深圳免费网站排名优化句容网站优化价格整站网站优化公司有哪些杭州网站建设与优化服务商扬州广陵网站优化哪家专业百家号优化网站香港通过《维护国家安全条例》两大学生合买彩票中奖一人不认账让美丽中国“从细节出发”19岁小伙救下5人后溺亡 多方发声卫健委通报少年有偿捐血浆16次猝死汪小菲曝离婚始末何赛飞追着代拍打雅江山火三名扑火人员牺牲系谣言男子被猫抓伤后确诊“猫抓病”周杰伦一审败诉网易中国拥有亿元资产的家庭达13.3万户315晚会后胖东来又人满为患了高校汽车撞人致3死16伤 司机系学生张家界的山上“长”满了韩国人?张立群任西安交通大学校长手机成瘾是影响睡眠质量重要因素网友洛杉矶偶遇贾玲“重生之我在北大当嫡校长”单亲妈妈陷入热恋 14岁儿子报警倪萍分享减重40斤方法杨倩无缘巴黎奥运考生莫言也上北大硕士复试名单了许家印被限制高消费奥巴马现身唐宁街 黑色着装引猜测专访95后高颜值猪保姆男孩8年未见母亲被告知被遗忘七年后宇文玥被薅头发捞上岸郑州一火锅店爆改成麻辣烫店西双版纳热带植物园回应蜉蝣大爆发沉迷短剧的人就像掉进了杀猪盘当地回应沈阳致3死车祸车主疑毒驾开除党籍5年后 原水城县长再被查凯特王妃现身!外出购物视频曝光初中生遭15人围殴自卫刺伤3人判无罪事业单位女子向同事水杯投不明物质男子被流浪猫绊倒 投喂者赔24万外国人感慨凌晨的中国很安全路边卖淀粉肠阿姨主动出示声明书胖东来员工每周单休无小长假王树国卸任西安交大校长 师生送别小米汽车超级工厂正式揭幕黑马情侣提车了妈妈回应孩子在校撞护栏坠楼校方回应护栏损坏小学生课间坠楼房客欠租失踪 房东直发愁专家建议不必谈骨泥色变老人退休金被冒领16年 金额超20万西藏招商引资投资者子女可当地高考特朗普无法缴纳4.54亿美元罚金浙江一高校内汽车冲撞行人 多人受伤

深圳坪山网站建设公司 XML地图 TXT地图 虚拟主机 SEO 网站制作 网站优化