判定元素是否刚插入到DOM树
上接《这篇博文》,其应用于avalon的if绑定。如果一个节点还没有插入DOM树,那么avalon将延时对它进行扫描渲染,直到它再次插入到DOM树为止。由于CSS3 keyframe动画的复杂性,我还是使用很挫的轮询方式来判定一个节点插入到DOM树。
https://github.com/RubyLouvre/avalon/blob/master/avalon.js#L1938
avalon(elem).addClass("fixMsIfFlicker")
var id = setInterval(function() {
if (root.contains(elem)) {
clearInterval(id)
ifcall()
avalon(elem).removeClass("fixMsIfFlicker")
}
}, 20)
今天一早与Aaron聊过后,决定试用DOMNodeInserted事件。因为Aaron提供了非常好的脚本,用于判定浏览器是否支持变动事件。
document.implementation.hasFeature("MutationEvents", "2.0")
下面是一个完整的测试脚本,如果有IE9或其他标准浏览器的人,请帮忙把你们在控制台看到的打印日志提交给我(连同浏览器的类型与版本号)
<!DOCTYPE HTML>
<html id="html">
<head>
<meta charset="utf-8">
<title>测试用例</title>
</head>
<body>
<h3>测试变动事件支持情况:</h3>
<table>
<tr>
<th>浏览器</th><th>DOMNodeRemoved</th><th>DOMNodeInserted</th>
</tr>
<tr>
<th>IE11</th><th>ok</th><th>ok</th>
</tr>
<tr>
<th>IE10</th><th>ok</th><th>ok</th>
</tr>
<tr>
<th>IE10的IE9模式</th><th>ok</th><th>ok</th>
</tr>
<tr>
<th>firefox25</th><th>ok</th><th>ok</th>
</tr>
<tr>
<th>chrome31</th><th>ok</th><th>ok</th>
</tr>
<tr>
<th>safar5.1.7</th><th>ok</th><th>ok</th>
</tr>
</table>
<div id="aaa"></div>
<script> console.log(document.implementation && document.implementation.hasFeature("MutationEvents", "2.0"))
window.onload = function() {
var el = document.getElementById("aaa")
document.body.addEventListener("DOMNodeRemoved", function(e) {
console.log(e.type)
console.log(e.target.id)
})
document.body.addEventListener("DOMNodeInserted", function(e) {
console.log(e.type)
console.log(e.target.id)
}) var div = document.createElement("div")
div.id = "insert"
document.body.appendChild(div)
el.parentNode.removeChild(el) } </script>
</body>
</html>
目前收集的数据如下:
| 浏览器 | DOMNodeRemoved | DOMNodeInserted |
|---|---|---|
| IE11 | ok | ok |
| IE10 | ok | ok |
| IE10的IE9模式 | ok | ok |
| firefox25 | ok | ok |
| chrome31 | ok | ok |
| safar5.1.7 | ok | ok |
外国这篇文章提示说DOMNodeInserted有BUG。
判定元素是否刚插入到DOM树的更多相关文章
- 判定元素正在插入到DOM树——DOMNodeInsertedIntoDocument
在firefox, webkit中我们可以使用DOMNodeInsertedIntoDocument事件,但这个事件很快变废弃了,虽然浏览器还是很有节操地支持它们,但哪一天不在也很难说.比如说fire ...
- 通过Ztree生成页面html元素Dom树,以及拖拽改变元素的位置
zTree 是一款依靠 jQuery 实现的多功能 "树插件",http://www.treejs.cn/v3/main.php#_zTreeInfo,功能强大,不多赘述. 下面我 ...
- WebKit Inside: DOM树的构建
当客户端App主进程创建WKWebView对象时,会创建另外两个子进程:渲染进程与网络进程.主进程WKWebView发起请求时,先将请求转发给渲染进程,渲染进程再转发给网络进程,网络进程请求服务器.如 ...
- DOM树操作
DOM 操作 访问与树关系(节点) 绘制 DOM 树: childNodes, attributes 从一个中心元素访问其所有的直系亲属元素 访问父节点: parentNode 访问上一个兄弟节点: ...
- 从Chrome源码看浏览器如何构建DOM树
.aligncenter { clear: both; display: block; margin-left: auto; margin-right: auto } p { font-size: 1 ...
- JS的Dom树小结
一[DOM树节点] DOM节点分为三大类:元素节点.文本节点.属性节点 文本节点.属性节点,为元素节点的两个子节点: 通过getElement系列方法,可以去到元素节点. 二[查看节点] ...
- DOM树节点和事件
一.前言:DOM树节点是JS的基础语句.通过节点,能够取到HTML代码中的任意标签,从而对其进行修改和添加各种视觉效果. 二.DOM树节点 DOM节点分为三大类: 元素节点,属性节点,文本节点 ...
- 深入解析浏览器的幕后工作原理(三) 呈现树和 DOM 树的关系
呈现树和 DOM 树的关系 呈现器是和 DOM 元素相对应的,但并非一一对应.非可视化的 DOM 元素不会插入呈现树中,例如"head"元素.如果元素的 display 属性值为& ...
- 超全面的JavaWeb笔记day04<dom树等>
1.案例:在末尾添加节点(*****) 创建标签 createElement方法 创建文本 createTextNode方法 把文本添加到标签下面 appendChild方法 2.元素对象(了解) 如 ...
随机推荐
- L126
Like so many things, it is not what's outside, but what is inside that counts. 许多事物都是如此,外表看起來虽不起眼,但是 ...
- Ubuntu使用PlayOnLinux笔记
playonlinux官网:https://www.playonlinux.com/en/ 帮助文档:https://www.playonlinux.com/en/documentation.html ...
- poj3107(dfs,树形dp)
和poj1655的方法完全一样,但是这道题的n的范围大了,用vector存图会TLE(poj没有O2编译优化),所以改用前向星来存图就可以了.. 有关树的重心,看这里:poj1655 这里解释一下前向 ...
- [转]页游开发中的 Python 组件与模式Presentation Transcript
转: 页游开发中的 Python 组件与模式Presentation Transcript 1. 页游开发中的 Python 组件与模式 赖勇浩( http://laiyonghao.com ) 20 ...
- Struts2常用标签总结
Struts2常用标签总结 一 介绍 1.Struts2的作用 Struts2标签库提供了主题.模板支持,极大地简化了视图页面的编写,而且,struts2的主题.模板都提供了很好的扩展性.实现了更好的 ...
- python3.x 函数的参数
2016-08-09 15:06:18 位置参数 调用函数时,参数按照位置依次传递给函数 def show(a1,a2,a3,a4): print(a1,a2,a3,a4) show('s','h' ...
- Spring、Spring MVC、MyBatis整合文件配置详解2
使用SSM框架做了几个小项目了,感觉还不错是时候总结一下了.先总结一下SSM整合的文件配置.其实具体的用法最好还是看官方文档. Spring:http://spring.io/docs MyBatis ...
- ajax同步异步
test.html <a href="javascript:void(0)" onmouseover="testAsync()"> asy.js f ...
- 集群/分布式环境下,Session处理策略
前言 在搭建完集群环境后,不得不考虑的一个问题就是用户访问产生的session如何处理.如果不做任何处理的话,用户将出现频繁登录的现象.比如集中中存在A.B两台服务器,用户在第一次访问网站是,Ngin ...
- Java 引用类型变量的声明和使用
引用类型变量的声明和使用 (1)把类名当作是一种类型来声明变量,这种变量叫引用类型变量.如:People people; (2)引用类型变量保存对象的“引用”,即对象的地址. (3)对象的创建 new ...