一文搞懂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将文件/图片批量打包下载zip的教程

    vue将文件/图片批量打包下载zip的教程

    这篇文章主要介绍了vue将文件/图片批量打包下载zip的教程,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-10-10
  • 基于Vue sessionStorage实现保留搜索框搜索内容

    基于Vue sessionStorage实现保留搜索框搜索内容

    这篇文章主要介绍了基于Vue sessionStorage实现保留搜索框搜索内容,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-06-06
  • vue.js父组件使用外部对象的方法示例

    vue.js父组件使用外部对象的方法示例

    在我们日常开发中经常因为思维定式,我们会犯一些奇怪的错误,有时候看似简单的问题却给出了复杂的解决方案。下面这篇文章主要介绍了vue.js父组件使用外部对象的方法,这个看似简单却绕了一些弯路的问题,有必要和大家分享下,需要的朋友可以参考学习,下面来看看吧。
    2017-04-04
  • vue 基于element-ui 分页组件封装的实例代码

    vue 基于element-ui 分页组件封装的实例代码

    这篇文章主要介绍了vue 基于element-ui 分页组件封装的实例代码,代码简单易懂,非常不错,具有一定的参考借鉴价值,需要的朋友可以参考下
    2018-12-12
  • 浅谈Vue 函数式组件的使用技巧

    浅谈Vue 函数式组件的使用技巧

    这篇文章主要介绍了浅谈Vue 函数式组件的使用技巧,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-06-06
  • vue3中的defineExpose使用示例教程

    vue3中的defineExpose使用示例教程

    这篇文章主要介绍了vue3中的defineExpose使用,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2023-09-09
  • vue引入axios同源跨域问题

    vue引入axios同源跨域问题

    这篇文章主要介绍了vue引入axios同源跨域问题,文章给大家提供了解决方案,非常不错,具有一定的参考借鉴价值,需要的朋友可以参考下
    2018-09-09
  • VUE重点问题总结

    VUE重点问题总结

    本篇内容给大家总结了VUE的重要难点,并把代码做了详细分享,有兴趣的朋友参考学习下。
    2018-03-03
  • vue如何给自定义的组件绑定点击事件

    vue如何给自定义的组件绑定点击事件

    这篇文章主要介绍了vue如何给自定义的组件绑定点击事件,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-04-04
  • vue等两个接口都返回结果再执行下一步的实例

    vue等两个接口都返回结果再执行下一步的实例

    这篇文章主要介绍了vue等两个接口都返回结果再执行下一步的实例,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-09-09

最新评论