javascript - 谷歌浏览器错误还是什么?
问题描述
var block1 = document.getElementById('block1');
var block2 = document.getElementById('block2');
document.getElementById('button1').addEventListener('click', function (e) {
block1.style.display = 'inline-block';
block1.className = 'active';
block2.style.display = 'inline-block';
block2.offsetLeft; //<----------- look at this
block2.className = 'active';
})
#block1{display:none;width:100px;height:100px;background:red;transition:5s all}
#block2{display:none;width:100px;height:100px;background:green;transition:5s all}
#block1.active, #block2.active{transform:rotateZ(315deg)}
<button id="button1">Run</button>
<div id="block1"></div>
<div id="block2"></div>
看代码
谷歌浏览器 70.xx (11.2018)
让我们在谷歌浏览器上运行它,你会看到block2
rotateZ 315deg,同时block1
立即完成转换。
IE 11 (2015)
block1
&block2
运行得很好。
为什么会这样?我头疼了 1 小时才弄明白
我的总结
block2.offsetLeft 喜欢强制 Chrome 计算元素的位置和大小,以便它们可以在下一步中转换。如果我们不这样做,Chrome 将在下一帧渲染中计算 => 所以none
不要inline-block
运行过渡(仅动画)
解决方案
推荐阅读
- list - 如何在 Java 中循环赋予队列列表各种名称?
- mysql - MySQL (Aurora) 使用 adddate 或 date-add 或 date-sub 更新时间戳表示语法错误
- php - 当刀片中的数组中缺少 img 时,Laravel 创建 if 语句
- python - 如何使用 pandas 修改特定的 csv 文件
- mysql - mysql - 将匹配多个字段(接近重复项)的除 1 条记录之外的所有记录标记为已删除
- python - 使用 pandas 保存带有扩展 ascii 分隔符的 csv 文件
- jquery - 根据选择选项值将 a 添加到计数器
- angular - 为什么我不能得到我的
当我在 html 元素上使用 click 事件时显示正确的 html? - php - Laravel:基于 JWT 的授权,在 Postman 中工作,但不在浏览器中
- javascript - 将元素添加到数组并从前面删除元素,一次一个,每 2 秒一次,直到数组为空?