当前位置:首页 > VUE

vue实现抖动

2026-03-07 06:28:26VUE

Vue 实现抖动效果

在 Vue 中实现抖动效果可以通过 CSS 动画或 JavaScript 动态控制样式。以下是几种常见的方法:

使用 CSS 动画

通过定义 @keyframes 实现抖动动画,再应用到 Vue 组件上。

.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); }
}

在 Vue 模板中动态绑定类名:

<template>
  <div :class="{ shake: isShaking }" @click="triggerShake">点击抖动</div>
</template>

<script>
export default {
  data() {
    return {
      isShaking: false
    }
  },
  methods: {
    triggerShake() {
      this.isShaking = true
      setTimeout(() => {
        this.isShaking = false
      }, 500)
    }
  }
}
</script>

使用 Vue Transition

结合 Vue 的 <transition> 组件和 CSS 动画实现。

<template>
  <transition name="shake">
    <div v-if="show" @click="shake">抖动元素</div>
  </transition>
</template>

<style>
.shake-enter-active {
  animation: shake 0.5s;
}
</style>

使用 JavaScript 动态样式

通过 Vue 的响应式数据动态修改样式属性。

<template>
  <div 
    :style="shakeStyle" 
    @click="startShake"
  >动态抖动</div>
</template>

<script>
export default {
  data() {
    return {
      shakeStyle: {},
      shakeCount: 0
    }
  },
  methods: {
    startShake() {
      this.shakeCount = 0
      this.doShake()
    },
    doShake() {
      if (this.shakeCount >= 10) {
        this.shakeStyle = { transform: 'translateX(0)' }
        return
      }
      const direction = this.shakeCount % 2 === 0 ? -5 : 5
      this.shakeStyle = { transform: `translateX(${direction}px)` }
      this.shakeCount++
      setTimeout(this.doShake, 50)
    }
  }
}
</script>

使用第三方库

可以集成如 animate.cssvue-kinesis 等库简化实现。

安装 animate.css

npm install animate.css

在 Vue 中使用:

vue实现抖动

<template>
  <div class="animated shake" v-if="isShaking">抖动效果</div>
</template>

<script>
import 'animate.css'
export default {
  data() {
    return {
      isShaking: false
    }
  }
}
</script>

注意事项

  • 抖动幅度和持续时间可通过调整 CSS 的 translateX 值和 animation-duration 自定义。
  • 频繁触发动画时建议清除旧动画,避免性能问题。
  • 移动端需考虑硬件加速,可添加 will-change: transform 优化性能。

标签: vue
分享给朋友:

相关文章

vue实现微博发布动态

vue实现微博发布动态

使用Vue实现微博发布动态功能 创建Vue组件结构 新建一个WeiboPost.vue组件,包含文本框、图片上传和发布按钮: <template> <div class="we…

vue实现递归

vue实现递归

Vue 实现递归组件的方法 在 Vue 中实现递归组件通常用于处理树形结构数据(如菜单、评论列表、文件目录等)。以下是具体实现方法: 定义递归组件 通过 name 选项让组件可以递归调用自身: &…

简单实现vue

简单实现vue

Vue 的基本实现 创建一个简单的 Vue 应用需要引入 Vue 库,并编写基本的模板和数据绑定逻辑。 <!DOCTYPE html> <html lang="en"> &l…

vue实现选择

vue实现选择

Vue 实现选择功能的方法 在 Vue 中实现选择功能可以通过多种方式完成,以下介绍几种常见的实现方法。 使用 v-model 绑定单选 通过 v-model 可以轻松实现单选功能。以下是一个简单的…

vue遮罩实现

vue遮罩实现

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

vue如何实现tap

vue如何实现tap

实现Tap事件的方法 在Vue中实现类似移动端的tap事件(轻触)可以通过以下几种方式完成。原生移动端浏览器通常通过touchstart和touchend事件组合模拟tap,而Vue中可以封装自定义指…