当前位置:首页 > VUE

vue实现抖动

2026-03-27 16:04:44VUE

Vue 实现抖动效果的方法

抖动效果可以通过 CSS 动画或 JavaScript 实现。以下是几种常见的实现方式:

使用 CSS 动画

在 Vue 组件的样式部分定义抖动动画:

.shake {
  animation: shake 0.5s cubic-bezier(.36,.07,.19,.97) both;
}

@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="shake">
    点击抖动
  </div>
</template>

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

使用第三方库

安装 animate.css 库:

npm install animate.css

在 Vue 中使用:

vue实现抖动

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

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

使用 JavaScript 实现

通过直接操作 DOM 元素的样式实现抖动:

<template>
  <div ref="shakeElement" @click="shake">
    点击抖动
  </div>
</template>

<script>
export default {
  methods: {
    shake() {
      const element = this.$refs.shakeElement
      let distance = 5
      let times = 10
      let interval = 50

      const shakeInterval = setInterval(() => {
        if (times-- <= 0) {
          clearInterval(shakeInterval)
          element.style.transform = 'translateX(0)'
          return
        }

        const direction = times % 2 === 0 ? -1 : 1
        element.style.transform = `translateX(${distance * direction}px)`
        distance *= 0.9
      }, interval)
    }
  }
}
</script>

注意事项

  1. CSS 动画性能通常优于 JavaScript 实现
  2. 考虑添加 will-change: transform 提升动画性能
  3. 抖动时间不宜过长,通常 0.5-1 秒足够
  4. 移动端可能需要调整抖动幅度

以上方法可以根据具体需求选择使用,CSS 动画实现最简单,第三方库提供更多预设动画,JavaScript 实现则提供最大灵活性。

标签: vue
分享给朋友:

相关文章

vue实现防抖节流

vue实现防抖节流

Vue 中实现防抖(Debounce) 防抖的核心是延迟执行函数,在连续触发时取消前一次的调用,只执行最后一次。适用于输入框搜索、窗口大小调整等场景。 方法1:使用 Lodash 的 _.debou…

vue实现跑车

vue实现跑车

Vue 实现跑车动画效果 使用 Vue 结合 CSS 动画可以实现跑车在屏幕上移动的效果。以下是一个完整的实现方案: 创建 Vue 组件结构 <template> <div c…

vue插槽实现

vue插槽实现

插槽的基本概念 Vue插槽(Slot)是一种内容分发机制,允许父组件向子组件传递模板片段,子组件通过<slot>标签定义接收位置。插槽的核心作用是增强组件的灵活性和复用性。 默认插槽 子…

vue 绑定实现

vue 绑定实现

Vue 绑定实现 Vue 提供了多种数据绑定的方式,包括文本插值、属性绑定、事件绑定、双向绑定等。以下是常见的绑定实现方法: 文本插值 使用双大括号 {{ }} 进行文本插值,将数据动态渲染到 DO…

vue实现队列

vue实现队列

Vue 实现队列功能 在 Vue 中实现队列功能可以通过多种方式完成,以下是几种常见的方法: 使用数组模拟队列 队列遵循先进先出(FIFO)原则,可以用数组的 push 和 shift 方法模拟入队…

vue拼图实现

vue拼图实现

实现 Vue 拼图游戏的方法 使用 Vue 组件和动态数据绑定 创建一个 Vue 组件来管理拼图的状态和逻辑。通过 v-for 动态渲染拼图块,利用 v-bind 绑定样式和位置。拼图块的数据可以存储…