MutationObserver

  • MutationObserver -- 判断vue Dom渲染完成
    • MutationObserver 作用
    • 方法
    • 应用实例

MutationObserver – 判断vue Dom渲染完成

获取想要获取dom元素的宽高,打印出来的结果值一直小于DOM元素本身高度。查阅很多资料无果,初步判断是vue升级以后,this.$nextTick监听方式发生改变。 更改方案,选择MutationObserver

Mutation Observer 是在DOM4中定义的,用于替代 mutation events 的新API,它的不同于events的是,所有监听操作以及相应处理都是在其他脚本执行完成之后异步执行的,并且是所以变动触发之后,将变得记录在数组中,统一进行回调的,也就是说,当你使用observer监听多个DOM变化时,并且这若干个DOM发生了变化,那么observer会将变化记录到变化数组中,等待一起都结束了,然后一次性的从变化数组中执行其对应的回调函数

MutationObserver 作用

MutationObserver接口提供了监视对DOM树所做更改的能力。

  1. 语法:var observer = new MutationObserver(callback);
  2. 作用:DOM规范的MutationObserver()构造函数 - 是MutationObserver接口内容的一部分 - 创建并返回一个新的观察者,它在DOM事件触发时调用指定的回调函数。DOM的观察不会立即启动;而必须先调用observe() 方法来确定要监听哪一部分的DOM以及要注意哪些更改。
  3. 参数:回调函数拥有两个参数:一个是描述所有被触发改动的MutationRecord对象数组,另一个是调用该函数的MutationObserver 对象。(每当被指定的节点或子树以及配置项有Dom变动时会被调用)
  4. 返回值:一个新的、包含监听Dom变化回调函数的MutationObserver 对象

方法

官方文档提供三个方法来操作监听:

  1. disconnect()
    1.1 语法:mutationObserver.disconnect()
    1.2 作用:告诉观察者停止观察变动。 可以通过调用其observe()方法来重用观察者。
    1.3 说明:阻止 MutationObserver 实例继续接收的通知,直到再次调用其observe()方法,该观察者对象包含的回调函数都不会再被调用。

  2. observe()
    2.1 语法:mutationObserver.observe(target[, options])
    2.2 作用:MutationObserver对象的回调方法以开始接收与给定选项匹配的DOM变化的通知。 根据配置,这个观察者会观察DOM树中的单个Node,或者指定的节点及其某些或者所有的子孙节点。
    2.3 说明:配置MutationObserver在DOM更改匹配给定选项时,通过其回调函数开始接收通知。要停止这个MutationObserver (以便不再触发它的回调方法),需要调用MutationObserver.disconnect()方法。

  3. takeRecords()
    3.1 语法:mutationRecords = mutationObserver.takeRecords()
    3.2 作用:从MutationObserver的通知队列中删除所有待处理的通知,并将它们返回到MutationRecord对象的新Array中。
    3.3 说明:返回已检测到但尚未由观察者的回调函数处理的所有匹配DOM更改的列表,使变更队列保持为空。 此方法最常见的使用场景是在断开观察者之前立即获取所有未处理的更改记录,以便在停止观察者时可以处理任何未处理的更改。

应用实例

// Firefox和Chrome早期版本中带有前缀
var MutationObserver = window.MutationObserver || window.WebKitMutationObserver || window.MozMutationObserver
// 选择目标节点
var target = document.querySelector('#some-id');
// 创建观察者对象
var observer = new MutationObserver(function(mutations) {  mutations.forEach(function(mutation) { console.log(mutation.type); //使用 mutation.type 获取发生的变动类别(无论是子节点的变动,还是节点属性的变动)。case 'childList':/* 从树上添加或移除一个或更多的子节点;参见 mutation.addedNodes 与mutation.removedNodes */break;case 'attributes':/* mutation.target 中某节点的一个属性值被更改;该属性名称在 mutation.attributeName 中,该属性之前的值为 mutation.oldValue */break;});
});
// 配置观察选项:
var config = {subtree: true, //Boolean - 目标以及目标的后代改变都会观察attributes: true, //检测属性变动childList: true,  //观察目标子节点的变化,添加或者删除characterData: true
}
// 传入目标节点和观察选项
observer.observe(target, config);
// 停止观察
observer.disconnect();

MutationObserver -- 判断vue Dom渲染完成相关推荐

  1. [vue] DOM渲染在哪个周期中就已经完成了?

    [vue] DOM渲染在哪个周期中就已经完成了? mounted生命周期 个人简介 我是歌谣,欢迎和大家一起交流前后端知识.放弃很容易, 但坚持一定很酷.欢迎大家一起讨论 主目录 与歌谣一起通关前端面 ...

  2. vue 组件第一次不渲染问题_解决vue页面渲染但dom没渲染的操作

    我就废话不多说了,大家还是直接看代码吧~ this.$nextTick(() => { $("select[name='ddlCostCenter']").select2({ ...

  3. 26.Vue列表渲染中key的作用与原理(内含虚拟DOM的对比算法详解)

    目录 1.暴露问题,使用index作为key 2.使用唯一标识p.id作为key 3.不写key的配置 4.key的工作原理及虚拟DOM的对比算法 5.总结 25.Vue列表渲染_爱米酱的博客-CSD ...

  4. angular监听图片加载完成_angular监听dom渲染完成,判断ng-repeat循环完成

    一.前言 最近做了一个图片懒加载的小插件,功能需要dom渲染完成后,好获取那些需要懒加载的dom元素.那么问题来了,如果只是感知静态的dom用ready,onload都可以,但项目用的angular, ...

  5. 5渲染判断_Vue页面渲染中key的应用实例教程

    引言 在前端项目开发过程中,el-table展示的结果列使用组件形式引入,其中某些字段通过:formatter方法转码,结果栏位的字段显示/隐藏控制也使用组件形式引入,前端在控制字段显示属性时,发现码 ...

  6. Vue 页面渲染的流程

    前言 在 Vue 核心中除了响应式原理外,视图渲染也是重中之重.我们都知道每次更新数据,都会走视图渲染的逻辑,而这当中牵扯的逻辑也是十分繁琐. 本文主要解析的是初始化视图渲染流程,你将会了解到从挂载组 ...

  7. Vue 条件渲染 列表绚烂 双向数据处理

    Vue 条件渲染 列表绚烂 双向数据处理 文章目录 Vue 条件渲染 列表绚烂 双向数据处理 1.style和class 2.条件渲染 3.列表渲染 3.1.v-for 循环数组,循环字符串,数字对象 ...

  8. vue_SSR框架:搭好的Vue服务器渲染框架,用vue做网站开发、做seo的首选。

    前端江太公 搭好的Vue服务器渲染框架,用vue做网站开发.做seo的首选 最成熟的Vue ssr框架,一个命令就能启动和部署.零侵入开发,跟开发vue纯客户端一模一样. 体验优秀成熟的ssr框架 使 ...

  9. vue首次渲染全过程

    昨天有朋友问我vue在页面第一次加载时到底做了些什么,看来这个问题在很多朋友心中可能还比较模糊,今天我们一起来详细的看看vue的首次渲染过程 vue源码下载地址:vue源码 了解vue首次渲染全过程, ...

最新文章

  1. Android Jetpack 组件之 Lifecycle使用
  2. Java获取真实的IP地址--转载
  3. matlab调用opencv库,matlab调用opencv库
  4. 列表怎么有限的初始化为零_《零基础学习Android开发》第五课 类与面向对象编程1-1...
  5. 管家婆SQL SERVER数据库“可能发生了架构损坏。请运行DBCC CHECKCATALOG”修复
  6. 蚂蚁金服王旭:开源的意义是把社区往前推进一步
  7. 把一个sql where表达式转化为一个二叉树
  8. c语言115写成16进制,西安电子科技大学计算机导论与C语言程序设计 计算机文化概论.pdf...
  9. python中的content方法_content最新:python计算Content-MD5并获取文件的Content-MD5值方式_爱安网 LoveAn.com...
  10. 如何将matlab转成jav,Matlab将GUI转化为exe文件,并且进行发布
  11. Linux之apache服务搭建以及浅析web安全
  12. Spring中使用id和name的区别。
  13. 二叉树前序中序后序javascript_详解二叉树遍历(前序、中序、后序、层次遍历、深度优先、广度优先)...
  14. Spark学习记录(二)Spark集群搭建
  15. MySQL(21)-----数据库事务
  16. 超星学习通 吉林大学 程序设计基础 实验07 递归程序设计(2022级)
  17. 设置程序在Windows开机后自动运行的方式
  18. OPENWRT,爱快等软路由推荐
  19. 如何使用 google 搜索
  20. springboot+mybatis报错处理

热门文章

  1. 从0开始做公众号|零基础如何运营一个公众号?
  2. linux之间怎么传文件,linux 之间互传文件
  3. android调用音量方法,android中获取当前音量大小
  4. 英文外链建设效果,英文外链群发怎么样?
  5. css文本字体形状_使用CSS更改文本字体
  6. linux 修改用户登陆shell字体颜色和vim颜色字体设置
  7. 玩玩iOS14 Beta系统
  8. 大数据学习笔记之三十七 数据挖掘算法之关联分析
  9. Spring中自定义注解支持SpEl表达式(仅限在AOP中使用)
  10. excel表格导入matlab并画等高线,#如何将excel表格中大量数据导入matlab中并作图#excel表格里的自由画笔...