首页 > 其他分享 >对目标元素进行监听 - addListener和IntersectionObserver

对目标元素进行监听 - addListener和IntersectionObserver

时间:2023-07-13 11:11:06浏览次数:58  
标签:addListener observer Observer 元素 API IntersectionObserver 监听

在web的构建中,经常需要对元素进行监听,例如监听元素是否出现在可视范围内。

我们可以通过addEventListener来监听滚动,计算元素距离顶部的位置对元素的变更来做出反应。

但是长时间大量的触发事件反而对网页性能影响很大,使用节流的话其实也只是浅浅的优化一下性能。有没有其他思路可以既当元素改变超过阈值的时候触发我们的状态又可以降低性能要求呢。

Intersection Observer API - Web API 接口参考 | MDN (mozilla.org)

Intersection Observer

通过Intersection Observer API来实现我们的要求。观察者。

Intersection Observer API提供了一种一部检测目标元素与祖先元素相交情况。当发生相交的时候就可以触发我们的事件监听,而不是长时间保持监听状态,在js中被称为观察者模式。

利用这个我们可以轻松构建图片懒加载、内容无限滚动、视频自动播放等常见的需求上。

用法

  1. 创建一个IntersectionObserver对象

    const observer = new IntersectionObserver(callback);
    //callback为触发事件
    
  2. Observer.observe目标对象

    observer.observe(dom);
    // observer可以同时监听多个元素, 触发gfn
    
  3. 可以设置具体参数

    let options = {
      root: document.querySelector('#scrollArea'),
      rootMargin: '0px',
      threshold: 1.0,// 阈值为 1.0 意味目标元素完全出现在 root 选项指定的元素中可见时
    }
    const observer = new IntersectionObserver(callback, options);
    // options设置observer
    

在回调函数中传参可以通过target属性来获取目标. 当然如果监听多个对象, 则需要遍历再获取target

const callbak = (entries) => {
	entries.forEach((entry) => {
		if (entry.isIntersecting) {
			console.log("我出现了");
		}
	}
}

entry.isIntersecting为状态值, 译为是否出现在root中, 且满足options条件.

标签:addListener,observer,Observer,元素,API,IntersectionObserver,监听
From: https://www.cnblogs.com/waterrec/p/17544642.html

相关文章

  • 前端编程开发 --- vue3 监听属性
    监听变量的变化并触发函数 <divid="app"><pstyle="font-size:25px;">计数器:{{counter}}</p><button@click="counter++"style="font-size:25px;">点我</button>//counter++表示变量自增......
  • Vue监听store中数据变化的2种方式
    http://chart.zhenglinglu.cn/pages/068e2f/#方式一......
  • vue-day12--监听属性
    <!DOCTYPEhtml><htmllang="en"><head><metacharset="UTF-8"/><metaname="viewport"content="width=device-width,initial-scale=1.0"/><title>天气案例--监听属性</title><scrip......
  • ,软件运行监听地址 ,扫码登录,爬虫介绍,requests模块介绍和快速使用,get请求携带参数,编码
    补充#软件运行,监听地址127.0.0.1 只能访问127.0.0.1localhost不能用本机ip地址访问,外部所有人都不能访问你0.0.0.0 127.0.0.1localhost本机ip地址访问同一个局域网内,都可以通过ip地址访问#本地host解析 输入网址---》www.baidu.com---->找本地host文......
  • redis的订阅发布功能中,前端如何监听到消息,并修改前端页面。
    ......
  • Spring高手之路7——事件机制与监听器的全面探索
    1.Spring中的观察者模式  观察者模式是一种行为设计模式,它定义了对象之间的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都会得到通知并被自动更新。在这个模式中,改变状态的对象被称为主题,依赖的对象被称为观察者。举个实际的例子:事件源(EventSource):可以视为“主题(Sub......
  • hook:beforedestroy - 监听生命周期
    vue中hook的两点使用1.在同一个组件中例如:在mounted中添加一个监听需要在beforeDistroy中移除这个监听,考虑到某些原因你不想再写个beforeDistroy去实现,这时候绿巨人hook就该登场了mounted(){window.addEventListener('online',this.handleOnline)this.$once('hook:be......
  • 2023-07-04 如何处理vue中不能监听到父传子组件props的变化
    前言:父传值给子组件,子组件需要根据传进来的值进行watch监听props中的值并遍历插入一个值,然后同时子组件的页面会跟着渲染。问题就是:子组件无法拿到watch更新的props值,比如传进一个list,然后通过watch来监听并在list里面加入一个新的值,前端页面拿不到新的值故而报错。原因:watch无......
  • redis监听过期key
    importorg.springframework.context.annotation.Bean;importorg.springframework.context.annotation.Configuration;importorg.springframework.data.redis.connection.RedisConnectionFactory;importorg.springframework.data.redis.listener.RedisMessageListenerConta......
  • spring 监听器 IntrospectorCleanupListener简介
     spring中的提供了一个名为org.springframework.web.util.IntrospectorCleanupListener的监听器。它主要负责处理由JavaBeans Introspector的使用而引起的缓冲泄露。spring中对它的描述如下: 它是一个在web应用关闭的时候,清除JavaBeansIntrospector的监听器.在web.xml中......