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

前端好用API之MutationObserver

时间:2022-08-15 13:24:43浏览次数:95  
标签:好用 observer observe MutationObserver 节点 API true 监听

前情

一直以来都没有好的方式可以监听元素变化,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>

演示地址:https://jsbin.com/nakobuv/edit?html,css,js,console,output

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

相关文章

  • JS学习-Web Workers API接口
    WebWorkersAPI接口通过使用WebWorkers,Web应用程序可以在独立于主线程的后台线程中,运行一个脚本操作。这样做的好处是可以在独立线程中执行费时的处理任务,从而允许主线......
  • APISpace 发现好物节 优惠多多
    叮叮叮!!APISpace即将迎来818发现好物节,又是一波满满的优惠福利。发现好物,当然是给大家带来了超多超热门超好用超实惠的API啦~除此之外,注册APISpace即可得到一份160元A......
  • flowable6.7.2 测试布署发布审核用例 、调用自带rest-api
    测试布署、发布、审批、查询历史/***部署流程*/@TestpublicvoidtestDeploy(){//方式一:会直接读取classpath下面的文件:flowable.cf......
  • Promise 静态 API 的使用方法
    Promise.all使用场景:假设我们希望许多Promise并行执行,并等待它们都准备好。一个实际例子是:并行下载多个URL,并在这些URL全部下载完成后,再进行后续的业务逻辑处理。......
  • Promise.all API 的出错处理
    Promise.all使用场景:假设我们希望许多Promise并行执行,并等待它们都准备好。一个实际例子是:并行下载多个URL,并在这些URL全部下载完成后,再进行后续的业务逻辑处理。......
  • 如果让我设计一套,TPS百万级API网关!
    作者:小傅哥博客:https://bugstack.cn沉淀、分享、成长,让自己和他人都能有所收获!......
  • 如果让我设计一套,TPS百万级API网关!
    作者:小傅哥博客:https://bugstack.cn沉淀、分享、成长,让自己和他人都能有所收获!......
  • Node.js + Express + Knex 开发 API 接口
    安装依赖包npmiexpressknexmysql2这是Knex官方文档地址:Knex.js-SQLquerybuilder。搭建接口config.js新建一个config.js文件,专门写knex的配置:importk......
  • Taurus.MVC WebAPI 入门开发教程8:WebAPI文档与自动化测试。
    系列目录1、Taurus.MVCWebAPI 入门开发教程1:框架下载环境配置与运行。2、Taurus.MVCWebAPI入门开发教程2:添加控制器输出HelloWorld。3、Taurus.MVCWebAPI入门开......
  • 一个图论很好用的软件
    Graphviz新版本似乎没有自带的编辑器了,老版本有可以点此下载安装完成后在目录\bin下找gvedit.exe即可使用教程可以官网文档或者B乎简单的几个例子无向图有向图......