js 动画,为啥要点击切换才会出效果呢
来源:4-4 使用 transition 标签实现单元素组件的过渡和动画效果(3)

慕少143437
2022-07-31
原问题:js 动画,为啥要点击切换才会出效果呢
最后通过 js 控制动画写好后,我当时的 div 的 show 初始值是 true, 也就是一出来就会显示 hello world, 为啥不能直接看到动画效果,却要在点击两次切换重新出现 hello world 才开始有动画效果了。 点击切换直接控制 show 的 true false 啊
老师你让我贴下代码
其实就是老师你课上讲的用 js 实现动画,只是当时你的 show 是 false, 需要点击一下才看得到是否有效果,我直接写的 true,刚进页面就看不到效果,需要点击切换两次才可以,必须得是在页面加载完成后改变 dom 才会有对应的动画效果吗?
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
<script src="https://unpkg.com/vue@next"></script>
</head>
<body>
<div id="root"></div>
</body>
<script>
const app = Vue.createApp({
template: `
<div>
<!-- 通过 js 实现动画 -->
<transition :css=false
@before-enter="handleBeforeEnter"
@enter="handleEnter"
@after-enter="handleAfterEnter"
>
<div v-if="show">hello world</div>
</transition>
<button @click="handleClick">切换</button>
</div>
`,
data() {
return {
show: true
}
},
methods: {
handleClick() {
this.show = !this.show;
},
handleBeforeEnter(el) {
el.style.color = 'yellow';
},
handleEnter(el, done) {
const animation = setInterval(() => {
if (el.style.color ==='yellow') {
el.style.color = 'pink'
} else {
el.style.color='yellow'
}
}, 1000);
setTimeout(() => {
clearInterval(animation);
done();
}, 2800)
},
handleAfterEnter() {
alert('动画结束');
}
}
});
const vm = app.mount("#root");
</script>
</html>
写回答
1回答
-
Dell
2022-08-07
因为这里的动画,实际上是 CSS 过度动画,过度动画执行,必须依赖 CSS 样式的变化。如果一开始 show 是 true,默认就是展示的,就不会触发展示动画。只有设置为 false,再改成 true,这样 css 的样式发生改变,才会触发动画的执行。
00
相似问题