当前位置:首页 > VUE

vue实现呼吸灯

2026-03-09 16:05:17VUE

实现呼吸灯效果的方法

呼吸灯效果可以通过CSS动画或JavaScript动态控制实现。以下是两种常见的实现方式:

使用CSS动画实现

通过CSS的@keyframes定义透明度或亮度的周期性变化,结合Vue的模板绑定类名或样式。

vue实现呼吸灯

<template>
  <div class="breathing-light"></div>
</template>

<style>
.breathing-light {
  width: 100px;
  height: 100px;
  background-color: #42b983;
  border-radius: 50%;
  animation: breathe 3s infinite;
}

@keyframes breathe {
  0% { opacity: 0.3; }
  50% { opacity: 1; }
  100% { opacity: 0.3; }
}
</style>

使用JavaScript动态控制

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

vue实现呼吸灯

<template>
  <div 
    class="breathing-light" 
    :style="{ opacity: currentOpacity }"
  ></div>
</template>

<script>
export default {
  data() {
    return {
      currentOpacity: 0.3,
      direction: 1,
      speed: 0.01
    };
  },
  mounted() {
    this.animate();
  },
  methods: {
    animate() {
      this.currentOpacity += this.speed * this.direction;
      if (this.currentOpacity >= 1 || this.currentOpacity <= 0.3) {
        this.direction *= -1;
      }
      requestAnimationFrame(this.animate);
    }
  }
};
</script>

<style>
.breathing-light {
  width: 100px;
  height: 100px;
  background-color: #42b983;
  border-radius: 50%;
}
</style>

结合Vue过渡效果

使用Vue的<transition>组件和CSS过渡属性实现平滑的呼吸效果。

<template>
  <transition name="breath">
    <div v-if="show" class="breathing-light"></div>
  </transition>
</template>

<script>
export default {
  data() {
    return {
      show: true
    };
  },
  mounted() {
    setInterval(() => {
      this.show = !this.show;
    }, 1500);
  }
};
</script>

<style>
.breathing-light {
  width: 100px;
  height: 100px;
  background-color: #42b983;
  border-radius: 50%;
}

.breath-enter-active, .breath-leave-active {
  transition: opacity 1.5s;
}
.breath-enter, .breath-leave-to {
  opacity: 0.3;
}
</style>

使用第三方库(如GSAP)

通过GSAP等动画库实现更复杂的呼吸效果。

<template>
  <div ref="light" class="breathing-light"></div>
</template>

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

export default {
  mounted() {
    gsap.to(this.$refs.light, {
      opacity: 0.3,
      duration: 1.5,
      repeat: -1,
      yoyo: true
    });
  }
};
</script>

<style>
.breathing-light {
  width: 100px;
  height: 100px;
  background-color: #42b983;
  border-radius: 50%;
}
</style>

注意事项

  • 性能优化:CSS动画通常性能更好,优先考虑纯CSS方案。
  • 兼容性:检查requestAnimationFrame和CSS动画的浏览器支持情况。
  • 参数调整:呼吸速度(animation-durationspeed)和透明度范围可根据需求调整。

标签: 呼吸vue
分享给朋友:

相关文章

vue实现删除

vue实现删除

Vue 实现删除功能的方法 在 Vue 中实现删除功能通常涉及以下几个步骤: 数据绑定与列表渲染 使用 v-for 指令渲染列表数据,并为每个项绑定唯一标识符(如 id)。例如: <…

vue实现逻辑

vue实现逻辑

Vue 实现逻辑的核心概念 Vue.js 是一个渐进式 JavaScript 框架,其核心逻辑围绕数据驱动和组件化开发。通过响应式系统、虚拟 DOM 和组件生命周期等机制,Vue 实现了高效的前端开发…

vue实现编辑

vue实现编辑

Vue 实现编辑功能 在 Vue 中实现编辑功能通常涉及表单绑定、状态管理和事件处理。以下是一个常见的实现方法: 双向数据绑定 使用 v-model 指令实现表单元素与数据的双向绑定: <i…

vue实现分栏

vue实现分栏

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

vue watch实现

vue watch实现

在 Vue 中实现 watch 监听数据变化 Vue 的 watch 选项用于监听数据变化并执行相应的回调函数。以下是几种常见的实现方式: 基础用法 export default { data(…

vue实现折叠

vue实现折叠

Vue 实现折叠功能 在 Vue 中实现折叠功能可以通过多种方式完成,以下介绍几种常见的方法。 使用 v-show 或 v-if 控制显示隐藏 通过 Vue 的指令 v-show 或 v-if 可以…