用intersectionObserver实现懒加载

1.埋点曝光的介绍

埋点曝光:intersectionObserver

intersectionObserver:可以用来异步监听目标DOM元素和祖先元素或视口(viewport)的交叉状态,简单来说,可以检测某个元素是否出现在当前视图内,

在intersectionObserver实例中,包含了一些Api

我们常这么用

var observer = new IntersectionObserver(callback,options);

前一个传参为回调函数,后一个为设置,可不传(有默认的属性值)

 

 

定义一个io 为 intersectionObserver实例

第一个参数传入一个回调函数,需要注意的是在intersectionObserver中,传入回调函数的参数是一个数组,数组中每个属性都是一个IntersectionObserverEntry对象

调用回调函数中的intersectionRatio属性

这个属性的意思是当视图完全不可见的时候,他的值小于等于0

当视图可见的时候,他的值为1

开始监听(io为可见区域div)

 

//每当视图层看到这个区域的时候才会触发(监听)

    io.observe(埋点DIV);

当目标元素的可见性发生变化的时候,就会触发observer,调用里面的回调函数

2.虚拟节点的介绍

1.createDocumentFragment()方法,是用来创建一个虚拟的节点对象,或者说,是用来创建文档碎片节点。它可以包含各种类型的节点,在创建之初是空的。

2:另外,当需要添加多个dom元素时,如果先将这些元素添加到DocumentFragment中,

再统一将DocumentFragment添加到页面,会减少页面渲染dom的次数,效率会明显提升。

3.如果使用appendChid方法将原dom树中的节点添加到DocumentFragment中时,会删除原来的节点。

实际使用:
循环里面将大量节点放进虚拟节点fargment中
    fragment.appendChild(li);
在循环外一次性将虚拟节点放入真实节点中
ul.appendChild(fragment);

这样的好处是页面实际上只发生了一次渲染dom节点

 

其实在平时看的网站中也会见到这种技术的应用

如:百度图片:

 

具体表现为:下拉条永远不会拉到底部

完整代码:

 

//先定义三个DIV.其中第一个DIV为我们刚进入页面的时候看到的,然后中间的DIV是拿来做DOM节点的新增的,最底下的DIV用来做埋点

 

每次触发埋点曝光的时候,新增div,同时页码+1

这里可执行任意操作,此案例仅用于参考

实现效果

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Vue 3 中可以使用 Intersection Observer API 来实现懒加载Intersection Observer API 可以观察一个元素是否进入了视口(viewport)或者离开了视口。 首先,你需要创建一个指令来实现懒加载: ```javascript const lazyLoad = { mounted(el, binding) { let options = { rootMargin: '0px', threshold: 0.1 }; const observer = new IntersectionObserver((entries, observer) => { entries.forEach(entry => { if (entry.isIntersecting) { binding.value(); observer.unobserve(el); } }); }, options); observer.observe(el); } } export default lazyLoad; ``` 在这个指令中,我们使用了 Intersection Observer API 来观察元素是否进入了视口。当元素进入视口时,我们会调用指令传入的回调函数。 接下来,在组件中使用这个指令: ```html <template> <div class="container"> <img v-lazyload="loadImage" :data-src="imageUrl" /> </div> </template> <script> import lazyLoad from "@/directives/lazyLoad"; export default { directives: { lazyload: lazyLoad }, data() { return { imageUrl: "https://example.com/image.jpg" }; }, methods: { loadImage() { const img = new Image(); img.onload = () => { this.$el.setAttribute("src", this.imageUrl); this.$el.removeAttribute("data-src"); }; img.src = this.imageUrl; } } }; </script> ``` 在这个例子中,我们在图片上使用指令 `v-lazyload`,并且传入了一个回调函数 `loadImage`。当图片进入视口时,指令会调用 `loadImage` 函数来加载图片。 在 `loadImage` 函数中,我们创建一个新的 `Image` 对象,并设置其 `onload` 回调函数。当图片加载完成时,我们将图片的 `src` 属性设置为 `imageUrl`,并移除 `data-src` 属性,以此来显示图片。 希望这个例子可以帮助你实现 Vue 3 中的懒加载
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值