当前位置:首页 > VUE

用vue实现弹窗抖动

2026-02-20 17:44:05VUE

使用 Vue 实现弹窗抖动效果

弹窗抖动是一种常见的交互效果,通常用于提示用户操作或吸引注意力。以下是两种实现方法,分别基于 CSS 动画和 JavaScript 动画库。

方法一:使用 CSS 动画

通过 Vue 绑定动态类名,结合 CSS @keyframes 实现抖动效果。

模板部分

<template>
  <div class="modal" :class="{ 'shake': isShaking }" @click="shakeModal">
    <div class="modal-content">
      <p>点击弹窗触发抖动</p>
    </div>
  </div>
</template>

脚本部分

<script>
export default {
  data() {
    return {
      isShaking: false
    };
  },
  methods: {
    shakeModal() {
      this.isShaking = true;
      setTimeout(() => {
        this.isShaking = false;
      }, 500); // 动画持续时间
    }
  }
};
</script>

样式部分

<style>
.modal {
  position: fixed;
  top: 50%;
  left: 50%;
  transform: translate(-50%, -50%);
  padding: 20px;
  background: white;
  border: 1px solid #ccc;
  border-radius: 8px;
}

.shake {
  animation: shake 0.5s cubic-bezier(0.36, 0.07, 0.19, 0.97) both;
}

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

方法二:使用 GSAP 动画库

GSAP 提供更灵活的动画控制,适合复杂抖动效果。

用vue实现弹窗抖动

安装 GSAP

npm install gsap

模板部分

<template>
  <div class="modal" ref="modal" @click="shakeModal">
    <div class="modal-content">
      <p>点击弹窗触发抖动</p>
    </div>
  </div>
</template>

脚本部分

用vue实现弹窗抖动

<script>
import { gsap } from "gsap";

export default {
  methods: {
    shakeModal() {
      gsap.to(this.$refs.modal, {
        x: -10,
        duration: 0.1,
        repeat: 5,
        yoyo: true,
        onComplete: () => {
          gsap.set(this.$refs.modal, { x: 0 });
        }
      });
    }
  }
};
</script>

样式部分

<style>
.modal {
  position: fixed;
  top: 50%;
  left: 50%;
  transform: translate(-50%, -50%);
  padding: 20px;
  background: white;
  border: 1px solid #ccc;
  border-radius: 8px;
}
</style>

注意事项

  1. 性能优化
    CSS 动画性能通常优于 JavaScript 动画,适合简单效果。GSAP 适合需要精细控制的场景。

  2. 浏览器兼容性
    CSS transformanimation 在现代浏览器中支持良好,旧版本需加前缀(如 -webkit-)。

  3. 交互逻辑
    可通过 v-ifv-show 控制弹窗显示,抖动作为附加效果。

以上方法可根据实际需求调整参数(如抖动幅度、持续时间)。

标签: vue
分享给朋友:

相关文章

vue实现本地数据存储

vue实现本地数据存储

使用 localStorage 或 sessionStorage Vue 中可以直接调用浏览器提供的 localStorage 或 sessionStorage API 进行数据存储。localSto…

vue实现jqueryui

vue实现jqueryui

Vue 实现 jQuery UI 功能 在 Vue 项目中实现类似 jQuery UI 的功能,可以通过原生 Vue 组件或第三方库来实现。以下是几种常见 jQuery UI 功能的 Vue 替代方案…

vue实现排序

vue实现排序

Vue 实现排序的方法 在 Vue 中实现排序可以通过多种方式完成,以下是一些常见的方法: 使用计算属性排序数组 计算属性非常适合对数据进行排序,因为它会在依赖的数据变化时自动更新。以下是一个示例:…

vue实现切换

vue实现切换

Vue 实现切换功能的方法 在 Vue 中实现切换功能可以通过多种方式实现,以下是一些常见的方法: 使用 v-if 和 v-else 指令 通过条件渲染实现切换功能,适用于简单的显示/隐藏场景…

vue实现分栏

vue实现分栏

Vue实现分栏的常见方法 使用CSS Flexbox布局 通过Flexbox可以快速实现分栏效果,适合大多数响应式布局场景 <template> <div class="co…

vue环境实现

vue环境实现

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