首页 > 其他分享 >前端好用API之MutationObserver

前端好用API之MutationObserver

时间:2023-08-23 10:11:07浏览次数:42  
标签:好用 observer observe MutationObserver 节点 API true 监听

https://www.cnblogs.com/xwwin/p/16587930.html

 

 

前情

一直以来都没有好的方式可以监听元素变化,Mutation events虽然可以监听DOM树结构变化,但是因性能问题和差的兼容问题(Webkit内核不支持)并不推荐使用。

MutationObserver介绍

MutationObserver接口提供了监视对DOM树所做更改的能力。它被设计为旧的Mutation Events功能的替代品,该功能是DOM3 Events规范的一部分,兼容IE11+

调用方式:

// 创建一个观察器实例并传入回调函数,它会在指定的DOM发生变化时被调用回调函数
const observer = new MutationObserver(callback);

// 以上述配置开始观察目标节点
observer.observe(element, config);

observer实例方法:

disconnect阻止MutationObserver实例继续接收通知,直到再次调用其observe()方法,该观察者对象包含的回调函数都不会再被调用
observe 启动监听,observe(target, config):
target:要监听的元素,config:监听配置,指定监听哪些变化  
takeRecords 从MutationObserver的通知队列中删除所有待处理的通知,并将它们返回到MutationRecord对象的新Array中

MutationObserver监听配置,observe的第二个参数:

属性说明
attributes 设为 true 以观察受监视元素的属性值变更,默认值false
attributeFilter 要监视的特定属性名称的数组。如果未包含此属性,则对所有属性的更改都会触发变动通知
characterData 设为 true ,以监视指定目标节点或子节点树中节点所包含的字符数据的变化
childList 设为 true ,以监视目标节点及其子节点,默认值为 false
subtree 设为 true,以监视目标节点及其子孙节点,默认值为 false

使用示例

<!DOCTYPE html>
<html>
<head>
  <meta charset="utf-8">
  <meta name="viewport" content="width=device-width">
  <title>JS Bin</title>
    <style>
        *{
          padding: 0;
          margin: 0;
        }
        .item{
          width: 100%;
          min-height: 40px;
          overflow: hidden;
          resize: both;
          margin-bottom: 5px;
          color: #fff;
          background-color: red;
        }
    </style>
</head>
<body>
    <div class="test">
      <div class="item">item0</div>
      <div class="item item-input" contentEditable></div>
      <p>拖动右下角resize手柄或者输入文本,都能监听到变化</p>
    </div>
    <script>
        window.onload = function() {
          // Firefox和Chrome早期版本中带有前缀
          var MutationObserver = window.MutationObserver|| window.WebKitMutationObserver || window.MozMutationObserver
          // 选择目标节点
          var target = document.querySelector('.test');
          // 创建观察者对象
          var observer = new MutationObserver(function(mutations) {
            console.log('--observer test--');
          });
          // 配置观察选项:
          var config = {
            childList: true,
            attributes: true,
            characterData: true,
            subtree: true
          }
          // 传入目标节点和观察选项
          observer.observe(target, config);

          var input = document.querySelector('.item-input');

          input.innerHTML = '123654';
        }
    </script>
</body>
</html>

标签:好用,observer,observe,MutationObserver,节点,API,true,监听
From: https://www.cnblogs.com/chinasoft/p/17650454.html

相关文章

  • Python基础入门学习笔记 025 字典:当索引不好用时
    映射 创建和访问字典>>>dict4=dict(小甲鱼='让编程改变世界',李宁='一切皆有可能')>>>dict4{'小甲鱼':'让编程改变世界','李宁':'一切皆有可能'}>>>dict4['爱迪生']='天才是99%的汗水加1%的灵感'>>&g......
  • ubuntu/linux 好用的截图工具 搜狗输入法自带的截图快捷键,自己觉得不方便的话,修改为
    公司要求使用ubuntu开发,在安装完必要得开发工具之后,按照我在windows平台的习惯,就准备安装一个好用的截图工具了,我比较推荐的是snipaste([https://zh.snipaste.com/download.html)]),同时QQ,微信的自带快捷键也十分好用。以下分别是windowsQQ微信的截图方式,非常好用。好的,不墨......
  • 【RESTful API的组成部分】
    RESTfulAPI是一种用于创建Web服务的软件架构风格,它使用HTTP协议定义了一组规则和约束。RESTfulAPI通过HTTP请求和响应来转移数据,并支持各种HTTP方法(GET,POST,PUT,DELETE),以实现对资源的操作。下面是RESTfulAPI的组成部分:资源(Resource):在RESTfulAPI中,资源表示服务器上的一种数据......
  • 通过一个实际的 Fiori Elements 扩展开发需求,介绍什么是 SAP Fiori Extension API 试
    本教程前一篇文章,介绍了如何在SAPFioriElementsListReport应用的Table区域里创建自定义Action,并且在该Action对应按钮的点击事件处理函数里,使用JavaScript代码打印出当前选中的表格行项目的业务数据。效果如下图所示:前一篇教程的解决方案,根据按钮的press事件点......
  • Apipost数据模型功能详解
    在API设计和开发过程中,存在许多瓶颈,其中一个主要问题是在遇到相似数据结构的API时会产生重复性较多的工作:在每个API中都编写相同的数据,这不仅浪费时间和精力,还容易出错并降低API的可维护性。为了解决这个问题,Apipost推出了数据模型板块。用户可以预先创建多个数据模型,并在API设计过......
  • Apipost数据模型功能详解
    在API设计和开发过程中,存在许多瓶颈,其中一个主要问题是在遇到相似数据结构的API时会产生重复性较多的工作:在每个API中都编写相同的数据,这不仅浪费时间和精力,还容易出错并降低API的可维护性。为了解决这个问题,Apipost推出了数据模型板块。用户可以预先创建多个数据模型,并在API设计......
  • API的幂等性设计
    一、背景    平台部分API需要保证接口的幂等性,防止业务频繁刷API导致资源浪费,或者不小心重发消息影响业务。二、解释    接口的幂等,指一个操作重复执行N次得到的结果与执行一次是相等的。比如在HTTP请求中,Get请求,得到的结果是相同的。但POST和PATCH的接口,每次请......
  • 【HarmonyOS】实现将pcm音频文件进行编码并写入文件(API6 Java)
     【关键字】音频编码、管道模式、createEncoder【写在前面】在使用API6开发HarmonyOS应用时,如何将pcm源文件进行编码并写入文件,最后生成aac文件,本文直接附上主要代码开发步骤供大家参考。【主要功能代码】importohos.media.codec.Codec;importohos.media.common.BufferInfo;im......
  • 【HarmonyOS】实现将pcm音频文件进行编码并写入文件(API6 Java)
    【关键字】音频编码、管道模式、createEncoder 【写在前面】在使用API6开发HarmonyOS应用时,如何将pcm源文件进行编码并写入文件,最后生成aac文件,本文直接附上主要代码开发步骤供大家参考。 【主要功能代码】importohos.media.codec.Codec;importohos.media.common.Buf......
  • JVS低代码中表单引擎与逻辑引擎是如何联合调用外部API的?
    在企业项目中,常常出现需要给外部系统提供一个api,让外部系统触发调用,本系统直接数据入库,那么我们来看看jvs的表单引擎与逻辑引擎联合实现这个功能,先看实现效果:配置步骤:一、配置列表页如下图所示:①选中需要增加列表页的目录,在目录操作的主界面上②点击创建列表页设计,系统进入列表页......