代码如下
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>test</title>
<style>
.move {
position: absolute;
width: 100px;
height: 100px;
background-color: red;
}
.start {
transform: translateX(0);
}
.move-active {
transition: transform 3s ease;
}
.end {
transform: translateX(100px);
}
</style>
</head>
<body>
<div class="move" style="display: none;"></div>
</body>
<script>
// 1
// var div = document.querySelector('.move');
// div.classList.add('start');
// div.classList.add('move-active');
// requestAnimationFrame(() => {
// div.classList.remove('start');
// div.classList.add('end');
// });
// div.style.display = 'block';
// 2
setTimeout(() => {
var div = document.querySelector('.move');
div.classList.add('start');
div.classList.add('move-active');
requestAnimationFrame(() => {
div.classList.remove('start');
div.classList.add('end');
});
div.style.display = 'block';
}, 0);
</script>
</html>
结果
- 第一部分代码,会有动画效果
- 第二部分代码,大概率没有动画效果
疑问
为什么同样的代码加了setTimeout之后会有不同的效果,setTimeout不是把整个代码块放到事件循环线程中么,然后在加入js引擎线程中执行么,按道理来说,这两个代码并不会导致不一样的结果啊?
经测试,效果是一样的。你把延时时间调成1000毫秒看。
0秒没有效果应该是浏览器没反应过来吧