DOM|DOM - getComputedStyle不为人知的黑科技
getComputedStyle就是计算dom的style属性的,但是他还有一个很很大的作用js动态生成节点, 控制起始动画,或者连续修改style的时候, 如果你给他一个动画属性,会发现并没有动画,
???
在这个过程中,浏览器会自动取最后一个值,并且修改Dom, 看例子
Node.style.left = '0px'
node.style.left = '100px'
这时候浏览器只会执行一次Dom更新, 那就是最后一个。(低版本的浏览器,比如IE不算在内)
于是style只更新一次, 就会发现, 动画并没有被执行!!
这时候一般的大家都是setTimeout来解决, 可是浏览器无法八门, 优化的时间控制也不一样。 给100ms又太浪费了,这时候代码洁癖的人,就很痛苦。
今天我偶然发现一个一个神器的代码。我们看下下面一行很熟悉的代码
winow.getComputedStyle(Node).styleKey
对,就是他了。
为了方便大家测试,下面有一个js代码,粘贴控制台看效果吧。
{
var id = "TEST"
var div = document.createElement('div')if(window[id]){
document.body.removeChild(window[id])
}
div.id = id
div.style.cssText = `width: 20px;
height: 20px;
border-radius: 50%;
background-color: red;
position: fixed;
z-index:9999;
top: 0;
transition: all 1s;
`
document.body.appendChild(div)var test = () => {
div.style.left = "2px"
if(true){
//这个属性会强行更新一波DOM
window.getComputedStyle(div).left// test
var animate = () => {
div.style.left = "100px"
}
animate()
} else {
window.setTimeout(() => {
div.style.left = "200px"
}, 200)
}}test()}
getComputedStyle
兼容IE9+移动端使用没有问题
嗯, 这个会让浏览器计算, 会发生重绘, 所以就, 破坏了优化, 强制更新。
下面这些都是会引起重绘的
offsetTop、offsetLeft、 offsetWidth、offsetHeight、scrollTop、scrollLeft、scrollWidth、scrollHeight、 clientTop、clientLeft、clientWidth、clientHeight、getComputedStyle() (currentStyle in IE)
--告辞--
【DOM|DOM - getComputedStyle不为人知的黑科技】--END--
推荐阅读
- 虚拟DOM-Diff算法详解
- [译文]Domain|[译文]Domain Driven Design Reference(四)—— 柔性设计
- JavaScript|JavaScript: BOM对象 和 DOM 对象的增删改查
- JavaScript|JavaScript之DOM增删改查(重点)
- 【读书笔记】JavaScript|【读书笔记】JavaScript DOM编程艺术 (第2版)
- python|python random使用方法
- 《DOM知识点总结》
- Python之random库的常用函数有哪些
- [Toddler's|[Toddler's Bottle]-random
- DOM、BOM、事件知识总结