当前位置:首页 > VUE

vue点击实现动画

2026-03-08 00:17:43VUE

使用 Vue 的过渡和动画系统

Vue 提供了内置的过渡和动画系统,可以通过 <transition><transition-group> 组件实现点击触发的动画效果。以下是一个简单的点击动画示例:

<template>
  <div>
    <button @click="show = !show">Toggle Animation</button>
    <transition name="fade">
      <p v-if="show">This element will fade in and out</p>
    </transition>
  </div>
</template>

<script>
export default {
  data() {
    return {
      show: false
    }
  }
}
</script>

<style>
.fade-enter-active, .fade-leave-active {
  transition: opacity 0.5s;
}
.fade-enter, .fade-leave-to {
  opacity: 0;
}
</style>

使用 CSS 动画

Vue 过渡系统也支持 CSS 动画,可以通过定义 @keyframes 实现更复杂的动画效果:

<template>
  <div>
    <button @click="animate = !animate">Start Animation</button>
    <transition name="bounce">
      <p v-if="animate">Bouncing text</p>
    </transition>
  </div>
</template>

<script>
export default {
  data() {
    return {
      animate: false
    }
  }
}
</script>

<style>
.bounce-enter-active {
  animation: bounce-in 0.5s;
}
.bounce-leave-active {
  animation: bounce-in 0.5s reverse;
}
@keyframes bounce-in {
  0% {
    transform: scale(0);
  }
  50% {
    transform: scale(1.5);
  }
  100% {
    transform: scale(1);
  }
}
</style>

使用 JavaScript 钩子

对于更复杂的动画需求,可以使用 JavaScript 钩子函数:

<template>
  <div>
    <button @click="show = !show">Toggle Animation</button>
    <transition
      @before-enter="beforeEnter"
      @enter="enter"
      @leave="leave"
      :css="false"
    >
      <p v-if="show" ref="animatedElement">JavaScript animated element</p>
    </transition>
  </div>
</template>

<script>
export default {
  data() {
    return {
      show: false
    }
  },
  methods: {
    beforeEnter(el) {
      el.style.opacity = 0
      el.style.transform = 'translateX(100px)'
    },
    enter(el, done) {
      let pos = 100
      const interval = setInterval(() => {
        el.style.opacity = (100 - pos) / 100
        el.style.transform = `translateX(${pos}px)`
        pos -= 2
        if (pos <= 0) {
          clearInterval(interval)
          done()
        }
      }, 20)
    },
    leave(el, done) {
      let pos = 0
      const interval = setInterval(() => {
        el.style.opacity = (100 - pos) / 100
        el.style.transform = `translateX(${pos}px)`
        pos += 2
        if (pos >= 100) {
          clearInterval(interval)
          done()
        }
      }, 20)
    }
  }
}
</script>

使用第三方动画库

可以集成第三方动画库如 Anime.js 或 GSAP 来实现更专业的动画效果:

<template>
  <div>
    <button @click="animateWithAnime">Animate with Anime.js</button>
    <div ref="box" class="box"></div>
  </div>
</template>

<script>
import anime from 'animejs'

export default {
  methods: {
    animateWithAnime() {
      anime({
        targets: this.$refs.box,
        translateX: 250,
        rotate: '1turn',
        backgroundColor: '#FF8A65',
        duration: 800,
        easing: 'easeInOutQuad'
      })
    }
  }
}
</script>

<style>
.box {
  width: 50px;
  height: 50px;
  background-color: #42b983;
  margin-top: 20px;
}
</style>

动态组件过渡

在不同组件之间切换时也可以应用过渡效果:

vue点击实现动画

<template>
  <div>
    <button @click="currentComponent = currentComponent === 'ComponentA' ? 'ComponentB' : 'ComponentA'">
      Toggle Components
    </button>
    <transition name="slide-fade" mode="out-in">
      <component :is="currentComponent"></component>
    </transition>
  </div>
</template>

<script>
const ComponentA = {
  template: '<div>Component A</div>'
}

const ComponentB = {
  template: '<div>Component B</div>'
}

export default {
  components: {
    ComponentA,
    ComponentB
  },
  data() {
    return {
      currentComponent: 'ComponentA'
    }
  }
}
</script>

<style>
.slide-fade-enter-active {
  transition: all 0.3s ease-out;
}
.slide-fade-leave-active {
  transition: all 0.3s cubic-bezier(1, 0.5, 0.8, 1);
}
.slide-fade-enter-from,
.slide-fade-leave-to {
  transform: translateX(20px);
  opacity: 0;
}
</style>

标签: 动画vue
分享给朋友:

相关文章

vue 实现拖动

vue 实现拖动

Vue 实现拖动的几种方法 在Vue中实现拖动功能可以通过多种方式,包括原生HTML5的拖放API、第三方库如vuedraggable等。以下是几种常见的实现方法: 使用HTML5拖放API HTM…

vue 实现流程

vue 实现流程

Vue 实现流程 Vue.js 是一个渐进式 JavaScript 框架,用于构建用户界面。以下是 Vue 实现的基本流程: 安装 Vue.js 通过 CDN 引入或使用 npm/yarn 安装:…

vue实现分步

vue实现分步

Vue 实现分步功能 在 Vue 中实现分步功能可以通过多种方式完成,以下是几种常见的方法: 使用动态组件 通过动态组件切换不同的步骤内容,结合 v-if 或 component 标签实现分步逻辑。…

vue实现 treegrid

vue实现 treegrid

Vue 实现 TreeGrid 的方法 使用现成组件库 Element UI、Ant Design Vue 等流行组件库提供了现成的 TreeTable/TreeGrid 组件,可直接使用。 Ele…

vue实现伸缩

vue实现伸缩

Vue实现伸缩功能的方法 使用CSS过渡和Vue的v-if或v-show 通过CSS的transition属性结合Vue的条件渲染指令(v-if或v-show)可以实现元素的伸缩效果。定义一个CSS类…

vue 实现登录验证

vue 实现登录验证

Vue 实现登录验证的方法 使用 Vue Router 进行路由守卫 在 Vue 项目中,可以通过 Vue Router 的路由守卫(Navigation Guards)实现登录验证。路由守卫可以在路…