一文搞懂Vue里的过渡和动画

 更新时间:2023年06月18日 16:43:24   作者:前端碎碎念  
在Vue中,过渡和动画是一种用于在组件之间添加平滑过渡效果和动画效果的高级用法,Vue提供了一些内置的过渡和动画功能,同时也支持自定义过渡和动画效果,本文就给大家介绍一些Vue中过渡和动画的高级用法,需要的朋友可以参考下

过渡的 CSS 类名

Vue的过渡功能是通过添加CSS类名来实现过渡效果。在过渡过程中,Vue会根据不同的阶段给元素添加不同的CSS类名,如v-enterv-enter-activev-leavev-leave-active等。适用于需要在组件之间添加平滑过渡效果的场景,如淡入淡出、滑动等。

<template>
  <transition name="fade">
    <p v-if="show">This is a fading element.</p>
  </transition>
  <button @click="toggleShow">Toggle Show</button>
</template>
<style>
    .fade-enter-active,
    .fade-leave-active {
      transition: opacity 0.5s;
    }
    .fade-enter,
    .fade-leave-to {
      opacity: 0;
    }
</style>
<script>
export default {
  data() {
    return {
      show: false
    };
  },
  methods: {
    toggleShow() {
      this.show = !this.show;
    }
  }
};
</script>

条件过渡的 CSS 类名

Vue还支持根据条件动态添加过渡的CSS类名。可以使用:class绑定来根据条件动态添加过渡的CSS类名,适用于根据条件动态切换过渡效果的场景,根据不同的条件添加不同的过渡效果。

<template>
  <transition :name="transitionName">
    <p v-if="show">This is a dynamic transition element.</p>
  </transition>
  <button @click="toggleShow">Toggle Show</button>
</template>
<script>
export default {
  data() {
    return {
      show: false,
      transitionName: 'fade'
    };
  },
  methods: {
    toggleShow() {
      this.show = !this.show;
      this.transitionName = this.show ? 'slide' : 'fade';
    }
  }
};
</script>

JavaScript 钩子函数

Vue提供了一些JavaScript钩子函数,用于在过渡过程中执行自定义的JavaScript代码。可以使用beforeEnterenterafterEnterbeforeLeaveleaveafterLeave等钩子函数来执行自定义的过渡逻辑。适用于需要在过渡过程中执行自定义的JavaScript逻辑的场景,如动态修改元素样式等。

<template>
  <transition
    @before-enter="beforeEnter"
    @enter="enter"
    @after-enter="afterEnter"
    @before-leave="beforeLeave"
    @leave="leave"
    @after-leave="afterLeave"
  >
    <p v-if="show">This is a custom transition element.</p>
  </transition>
  <button @click="toggleShow">Toggle Show</button>
</template>
<script>
    export default {
        data() {
            return {
              show: false
            };
          },
        methods() {
            beforeEnter(el) {
              console.log('Before Enter');
              el.style.opacity = 0;
            },
            enter(el, done) {
              console.log('Enter');
              setTimeout(() => {
                el.style.opacity = 1;
                done();
              }, 1000);
            },
            afterEnter(el) {
                console.log('After Enter');
            },
            beforeLeave(el) {
              console.log('Before Leave');
              el.style.opacity = 1;
            },
            leave(el, done) {
              console.log('Leave');
              setTimeout(() => {
                el.style.opacity = 0;
                done();
              }, 1000);
            },
            afterLeave(el) {
              console.log('After Leave');
            },
            toggleShow() {
              this.show = !this.show;
            }
        }
    }
</script>

列表过渡

Vue提供了专门的列表过渡功能,用于在列表中添加过渡效果。可以使用<transition-group>组件来包裹列表项,并使用v-movev-enterv-leave等CSS类名来定义列表项的过渡效果。 适用于在列表中添加过渡效果的场景,如列表项的渐显、滑动等过渡效果。

<template>
  <transition-group name="list" tag="ul">
    <li v-for="item in items" :key="item.id">{{ item.text }}</li>
  </transition-group>
  <button @click="addItem">Add Item</button>
</template>
<style>
.list-enter-active,
.list-leave-active {
  transition: all 0.5s;
}
.list-enter,
.list-leave-to {
  opacity: 0;
  transform: translateY(20px);
}
</style>
<script>
export default {
  data() {
    return {
      items: [
        { id: 1, text: 'Item 1' },
        { id: 2, text: 'Item 2' },
        { id: 3, text: 'Item 3' }
      ]
    };
  },
  methods: {
    addItem() {
      const newItem = {
        id: Date.now(),
        text: 'New Item'
      };
      this.items.push(newItem);
    }
  }
};
</script>

动态过渡和动画:

Vue支持根据动态数据来触发过渡和动画效果。可以使用动态绑定来根据数据的变化来触发过渡和动画效果。适用于根据动态数据触发过渡和动画效果的场景.

<template>
  <transition :name="transitionName">
    <p v-if="show">This is a dynamic transition element.</p>
  </transition>
  <button @click="toggleShow">Toggle Show</button>
</template>
<script>
export default {
  data() {
    return {
      show: false,
      transitionName: ''
    };
  },
  methods: {
    toggleShow() {
      this.show = !this.show;
      this.transitionName = this.show ? 'fade' : 'slide';
    }
  }
};
</script>

自定义过渡和动画

Vue允许自定义过渡和动画效果,以满足特定的需求。可以使用<transition><transition-group>组件的属性和事件来自定义过渡和动画效果。适用于需要自定义过渡和动画效果的场景,通过自定义CSS样式和JavaScript钩子函数来实现特定的过渡和动画效果。

<template>
  <transition
    name="custom-transition"
    @before-enter="beforeEnter"
    @enter="enter"
    @after-enter="afterEnter"
    @before-leave="beforeLeave"
    @leave="leave"
    @after-leave="afterLeave"
  >
    <p v-if="show">This is a custom transition element.</p>
  </transition>
  <button @click="toggleShow">Toggle Show</button>
</template>
<style>
.custom-transition-enter-active,
.custom-transition-leave-active {
  transition: opacity 0.5s, transform 0.5s;
}
.custom-transition-enter,
.custom-transition-leave-to {
  opacity: 0;
  transform: translateY(20px);
}
</style>
<script>
    export default {
      data() {
        return {
              show: false
          };
      },
      methods: {
         beforeEnter(el) {
              el.style.opacity = 0;
              el.style.transform = 'translateY(20px)';
            },
         enter(el, done) {
              setTimeout(() => {
                el.style.opacity = 1;
                el.style.transform = 'translateY(0)';
                done();
              }, 1000);
            },
         afterEnter(el) {
              // 执行进入后的操作
            },
         beforeLeave(el) {
              // 执行离开前的操作
            },
         leave(el, done) {
          setTimeout(() => {
            el.style.opacity = 0;
            el.style.transform = 'translateY(20px)';
            done();
          }, 1000);
         },
         afterLeave(el) {
          // 执行离开后的操作
         },
         toggleShow() {
          this.show = !this.show;
        }
      }
};
</script>

这些示例涵盖了不同的过渡和动画应用场景,可以根据具体的需求和场景选择适合的示例。

以上就是一文搞懂Vue里的过渡和动画的详细内容,更多关于Vue 过渡和动画的资料请关注脚本之家其它相关文章!

相关文章

  • 解决vue create 创建项目只有两个文件问题

    解决vue create 创建项目只有两个文件问题

    这篇文章主要介绍了解决vue create 创建项目只有两个文件问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2024-02-02
  • element-ui滚动条el-scrollbar置底方式

    element-ui滚动条el-scrollbar置底方式

    这篇文章主要介绍了element-ui滚动条el-scrollbar置底方式,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-08-08
  • vue正确使用watch监听属性变化方式

    vue正确使用watch监听属性变化方式

    这篇文章主要介绍了vue正确使用watch监听属性变化方式,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-04-04
  • VueJs组件之父子通讯的方式

    VueJs组件之父子通讯的方式

    这篇文章主要介绍了VueJs组件之父子通讯的方式,非常不错,具有一定的参考借鉴价值,需要的朋友可以参考下
    2018-05-05
  • vue使用v-if v-show页面闪烁,div闪现的解决方法

    vue使用v-if v-show页面闪烁,div闪现的解决方法

    在页面层次结构,数据较多的时候,用v-if或者v-show就会出现div闪现,或者部分闪烁的结果。怎么处理这样的问题呢,下面小编给大家带来了vue使用v-if v-show页面闪烁,div闪现的解决方法,一起看看吧
    2018-10-10
  • 关于ElementUI的el-upload组件二次封装的问题

    关于ElementUI的el-upload组件二次封装的问题

    这篇文章主要介绍了关于ElementUI的el-upload组件二次封装的问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-10-10
  • Vue3 中的  shallowReactive 详解

    Vue3 中的  shallowReactive 详解

    本文深入探讨了Vue3中新特性shallowReactive的使用和原理,shallowReactive是创建浅响应式对象的API,只对对象的第一层属性进行响应式转换,不对嵌套对象处理,有助于性能优化和状态管理,同时也指出了shallowReactive在使用中的注意事项
    2024-10-10
  • Vue组件之间的通信方式详细讲解

    Vue组件之间的通信方式详细讲解

    对于vue来说,组件之间的消息传递是非常重要的,用vue可以是要组件复用的,而组件实例的作用域是相互独立,这意味着不同组件之间的数据无法互相引用,一般来说,组件之间可以有几种关系,下面是我对组件之间消息传递的常用方式的总结
    2022-08-08
  • vue版数字翻牌器的封装

    vue版数字翻牌器的封装

    这篇文章主要为大家详细介绍了vue版数字翻牌器的封装,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-04-04
  • vue3+vite使用环境变量.env的一些配置情况详细说明

    vue3+vite使用环境变量.env的一些配置情况详细说明

    开发中经常会使用环境变量,Vite相比于Webpack也有一定的变化,下面这篇文章主要给大家介绍了关于vue3+vite使用环境变量.env的一些配置情况说明的相关资料,需要的朋友可以参考下
    2022-12-12

最新评论