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 的样式发生改变,才会触发动画的执行。

0
0

Vue3入门与项目实战 掌握完整知识体系

明星讲师DELL亲授,全方位知识点+高匹配度项目,入门到深度掌握

3382 学习 · 1454 问题

查看课程