当前位置:首页 > VUE

vue实现抖动

2026-01-12 23:19:35VUE

Vue 实现抖动效果

抖动效果通常用于吸引用户注意力或提示操作反馈。以下是几种实现方式:

CSS Animation 实现

通过定义 @keyframes 实现抖动动画,适用于简单场景:

vue实现抖动

<template>
  <div class="shake-element" @click="shake">点击抖动</div>
</template>

<style>
.shake-element {
  display: inline-block;
  padding: 10px 20px;
  background: #42b983;
  color: white;
  cursor: pointer;
}

.shake {
  animation: shake 0.5s;
}

@keyframes shake {
  0%, 100% { transform: translateX(0); }
  10%, 30%, 50%, 70%, 90% { transform: translateX(-5px); }
  20%, 40%, 60%, 80% { transform: translateX(5px); }
}
</style>

<script>
export default {
  methods: {
    shake() {
      const el = document.querySelector('.shake-element')
      el.classList.add('shake')
      setTimeout(() => el.classList.remove('shake'), 500)
    }
  }
}
</script>

使用 Vue Transition

结合 Vue 的过渡系统实现可复用的抖动效果:

vue实现抖动

<template>
  <button @click="isShaking = !isShaking">
    <transition name="shake">
      <span v-if="show">抖动内容</span>
    </transition>
  </button>
</template>

<style>
.shake-enter-active {
  animation: shake 0.5s;
}
.shake-leave-active {
  animation: shake 0.5s reverse;
}
/* 复用相同的 @keyframes */
</style>

第三方动画库

使用 animate.css 等成熟动画库快速实现:

npm install animate.css
<template>
  <div 
    class="animated"
    :class="{ 'shakeX': isShaking }"
    @click="isShaking = true"
  >
    抖动元素
  </div>
</template>

<script>
import 'animate.css'
export default {
  data() {
    return { isShaking: false }
  },
  watch: {
    isShaking(val) {
      if (val) setTimeout(() => this.isShaking = false, 1000)
    }
  }
}
</script>

GSAP 高级控制

需要精细控制动画时推荐使用 GSAP:

npm install gsap
<template>
  <div ref="shakeTarget">高级抖动</div>
  <button @click="startShake">开始</button>
</template>

<script>
import { gsap } from 'gsap'
export default {
  methods: {
    startShake() {
      gsap.to(this.$refs.shakeTarget, {
        x: -5, duration: 0.05, repeat: 5, yoyo: true
      })
    }
  }
}
</script>

每种方案各有优势:CSS 方案最轻量,Transition 适合 Vue 生态,动画库方便快捷,GSAP 提供最专业的控制能力。根据项目复杂度选择合适方案即可。

标签: vue
分享给朋友:

相关文章

vue实现弹窗

vue实现弹窗

Vue 实现弹窗的常见方法 使用组件化方式封装弹窗 创建一个独立的弹窗组件(如 Modal.vue),通过 v-if 或 v-show 控制显示隐藏: <template> <…

vue 实现递归

vue 实现递归

Vue 实现递归组件的方法 在 Vue 中实现递归组件通常用于处理树形结构数据,例如菜单、评论列表或文件目录。以下是实现递归组件的关键步骤: 定义递归组件 递归组件需要设置 name 属性,以便在模…

vue实现详情

vue实现详情

Vue 实现详情页的常见方法 使用动态路由 在 Vue Router 中配置动态路由参数,通过 $route.params 获取详情 ID。示例路由配置: { path: '/detail/:i…

vue环境实现

vue环境实现

Vue 环境搭建 安装 Node.js 和 npm Node.js 是运行 Vue 的基础环境,npm 是包管理工具。从 Node.js 官网 下载并安装最新稳定版本。安装完成后,在终端运行以下命令验…

vue实现多选

vue实现多选

Vue 实现多选功能 在 Vue 中实现多选功能可以通过多种方式完成,以下是常见的几种方法: 使用 v-model 绑定数组 通过 v-model 绑定到一个数组,可以实现多选功能。适用于复选框组(…

vue遮罩实现

vue遮罩实现

实现 Vue 遮罩的常见方法 使用 CSS 定位和透明度 创建一个全屏遮罩层,通过 CSS 固定定位覆盖整个视口,并设置半透明背景色。 <template> <div cl…