当前位置:首页 > VUE

vue实现扩散圆

2026-03-28 20:41:01VUE

实现扩散圆效果

在Vue中实现扩散圆效果可以通过CSS动画结合动态数据绑定完成。以下是两种常见实现方式:

vue实现扩散圆

CSS动画实现

通过@keyframes定义缩放动画,结合Vue的v-bind动态控制样式:

vue实现扩散圆

<template>
  <div class="circle-container">
    <div 
      v-for="(circle, index) in circles" 
      :key="index"
      class="ripple-circle"
      :style="{
        width: `${circle.size}px`,
        height: `${circle.size}px`,
        animation: `ripple ${circle.duration}s ease-out infinite`
      }"
    ></div>
  </div>
</template>

<script>
export default {
  data() {
    return {
      circles: [
        { size: 100, duration: 3 },
        { size: 150, duration: 4 },
        { size: 200, duration: 5 }
      ]
    }
  }
}
</script>

<style>
.ripple-circle {
  position: absolute;
  border-radius: 50%;
  background: rgba(0, 150, 255, 0.6);
  transform: scale(0);
  opacity: 0;
}

@keyframes ripple {
  0% {
    transform: scale(0.8);
    opacity: 0.8;
  }
  100% {
    transform: scale(2);
    opacity: 0;
  }
}
</style>

JavaScript动态控制

通过requestAnimationFrame实现更精细的控制:

<template>
  <div class="canvas-container">
    <canvas ref="canvas" width="400" height="400"></canvas>
  </div>
</template>

<script>
export default {
  mounted() {
    this.initCanvas();
  },
  methods: {
    initCanvas() {
      const canvas = this.$refs.canvas;
      const ctx = canvas.getContext('2d');
      let circles = [];

      function createCircle() {
        circles.push({
          x: 200,
          y: 200,
          radius: 10,
          alpha: 1,
          speed: 2
        });
      }

      function animate() {
        ctx.clearRect(0, 0, canvas.width, canvas.height);

        circles.forEach((circle, index) => {
          ctx.beginPath();
          ctx.arc(circle.x, circle.y, circle.radius, 0, Math.PI * 2);
          ctx.strokeStyle = `rgba(0, 150, 255, ${circle.alpha})`;
          ctx.lineWidth = 2;
          ctx.stroke();

          circle.radius += circle.speed;
          circle.alpha -= 0.01;

          if (circle.alpha <= 0) {
            circles.splice(index, 1);
          }
        });

        requestAnimationFrame(animate);
      }

      setInterval(createCircle, 500);
      animate();
    }
  }
}
</script>

优化建议

  1. 性能优化:对于大量扩散圆,建议使用Canvas而非DOM元素
  2. 参数化:通过props接收颜色、速度等参数使组件可复用
  3. 清除机制:添加beforeDestroy生命周期清理动画帧
  4. 交互增强:可绑定@click事件实现点击位置扩散效果

两种方式分别适合不同场景:CSS方案实现简单,Canvas方案性能更好且可控性更强。

标签: vue
分享给朋友:

相关文章

vue 实现

vue 实现

Vue 实现的基本步骤 安装 Vue.js 可以通过 npm 或 CDN 引入。使用 npm 安装适合大型项目,CDN 适合快速原型开发。 npm install vue 在 HTML 文件中引入…

vue实现功能

vue实现功能

Vue 功能实现方法 Vue.js 是一个渐进式 JavaScript 框架,用于构建用户界面。以下是实现常见功能的几种方法: 数据绑定与响应式更新 在 Vue 中,数据绑定通过 v-model…

vue实现sso

vue实现sso

Vue 实现 SSO(单点登录)方案 单点登录(SSO)允许用户通过一次登录访问多个相关系统。以下是基于 Vue 的实现方案: 使用 OAuth2/OpenID Connect 协议 OAuth2…

vue实现popup

vue实现popup

Vue 实现 Popup 弹窗 使用 Vue 原生组件 创建一个基本的 Vue 组件作为弹窗,通过 v-if 或 v-show 控制显示隐藏。 <template> <div&…

vue实现定时

vue实现定时

Vue 实现定时功能的方法 使用 setInterval 和 clearInterval 在 Vue 中可以通过 setInterval 和 clearInterval 实现定时功能。在组件的 mou…

vue实现 弹窗

vue实现 弹窗

Vue 实现弹窗的基本方法 使用 Vue 实现弹窗可以通过多种方式,包括组件化、指令、插件等。以下是几种常见的实现方法。 组件化实现弹窗 创建一个独立的弹窗组件,通过 props 控制显示与隐藏。…