当前位置:首页 > VUE

用vue实现弹窗抖动

2026-01-20 01:42:17VUE

使用Vue实现弹窗抖动效果

弹窗抖动是一种常见的交互效果,可以通过CSS动画或JavaScript动态样式实现。以下是两种在Vue中实现弹窗抖动的方案:

用vue实现弹窗抖动

方案一:CSS动画实现

创建一个抖动的CSS动画关键帧,通过Vue动态绑定类名触发动画。

用vue实现弹窗抖动

<template>
  <div class="modal" :class="{ 'shake-animation': isShaking }" @click="stopShaking">
    点击停止抖动
  </div>
  <button @click="startShaking">开始抖动</button>
</template>

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

<style>
.modal {
  width: 200px;
  height: 100px;
  background: #f0f0f0;
  display: flex;
  align-items: center;
  justify-content: center;
  margin: 20px auto;
}

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

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

方案二:JavaScript动态样式

通过ref获取DOM元素,使用setInterval动态修改样式实现抖动。

<template>
  <div ref="modal" class="modal" @click="stopShaking">
    点击停止抖动
  </div>
  <button @click="startShaking">开始抖动</button>
</template>

<script>
export default {
  methods: {
    startShaking() {
      this.shakeInterval = setInterval(() => {
        const randomX = (Math.random() * 10) - 5
        this.$refs.modal.style.transform = `translateX(${randomX}px)`
      }, 50)
    },
    stopShaking() {
      clearInterval(this.shakeInterval)
      this.$refs.modal.style.transform = 'translateX(0)'
    }
  },
  beforeUnmount() {
    clearInterval(this.shakeInterval)
  }
}
</script>

<style>
.modal {
  width: 200px;
  height: 100px;
  background: #f0f0f0;
  display: flex;
  align-items: center;
  justify-content: center;
  margin: 20px auto;
  transition: transform 0.1s;
}
</style>

方案三:使用第三方库

如果需要更复杂的动画效果,可以考虑使用动画库如Animate.css或GSAP。

<template>
  <div class="modal animate__animated" :class="{ 'animate__headShake': isShaking }">
    抖动弹窗内容
  </div>
  <button @click="toggleShaking">切换抖动</button>
</template>

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

以上三种方案均可实现弹窗抖动效果,CSS动画方案性能最佳,JavaScript方案控制更灵活,第三方库方案实现最简单。根据项目需求选择合适的实现方式。

标签: vue
分享给朋友:

相关文章

vue 实现简单登陆

vue 实现简单登陆

以下是一个使用 Vue 3 实现的简单登录功能示例,包含表单验证和基础交互逻辑: 创建 Vue 组件 <template> <div class="login-contain…

vue路由实现内部切换

vue路由实现内部切换

Vue 路由实现内部切换的方法 Vue Router 是 Vue.js 官方的路由管理器,用于实现单页应用(SPA)的页面切换。以下是几种常见的内部路由切换方式: 使用 <router-lin…

vue异步组建实现原理

vue异步组建实现原理

Vue 异步组件实现原理 Vue 的异步组件允许将组件按需加载,通常用于代码分割或延迟加载非关键组件。其核心原理基于 Promise 和动态导入。 基本实现方式 通过 defineAsyncCom…

vue实现绑卡的原理

vue实现绑卡的原理

Vue 实现绑卡的原理 Vue 实现绑卡功能通常涉及前端表单处理、数据绑定、验证以及和后端 API 的交互。以下是实现绑卡功能的核心原理和步骤: 数据绑定与表单处理 Vue 通过 v-model…

vue前端实现下载进度

vue前端实现下载进度

实现下载进度条的基本思路 在Vue中实现下载进度条,通常需要结合XMLHttpRequest或Fetch API来监听下载进度事件。通过计算已下载数据与总数据的比例,动态更新进度条的显示。 使用X…

vue实现发表

vue实现发表

Vue 实现发表功能 在 Vue 中实现发表功能通常涉及表单处理、数据绑定和网络请求。以下是实现步骤和代码示例: 表单设计与数据绑定 创建一个表单用于输入发表内容,使用 v-model 进行数据双…