当前位置:首页 > VUE

vue实现能量球

2026-02-20 11:11:24VUE

Vue 实现能量球效果

实现能量球效果可以通过结合 Vue 的动态数据绑定和 CSS 动画完成。以下是一个完整的实现方案,包含动态能量填充和交互效果。

基础结构

创建 Vue 组件模板,包含一个圆形能量球容器和内部填充层:

<template>
  <div class="energy-ball-container">
    <div 
      class="energy-ball" 
      :style="{ '--energy-level': energyLevel }"
      @click="addEnergy"
    >
      <div class="energy-fill"></div>
      <span class="energy-text">{{ energyLevel }}%</span>
    </div>
  </div>
</template>

脚本部分

使用 Vue 的响应式数据管理能量值:

vue实现能量球

<script>
export default {
  data() {
    return {
      energyLevel: 30 // 初始能量值
    }
  },
  methods: {
    addEnergy() {
      this.energyLevel = Math.min(this.energyLevel + 10, 100)
    }
  }
}
</script>

样式设计

通过 CSS 变量实现动态高度,并使用渐变色彩增强视觉效果:

<style scoped>
.energy-ball-container {
  display: flex;
  justify-content: center;
  padding: 2rem;
}

.energy-ball {
  --size: 200px;
  --border-width: 8px;

  width: var(--size);
  height: var(--size);
  border-radius: 50%;
  background: #e0e0e0;
  position: relative;
  overflow: hidden;
  box-shadow: 
    inset 0 0 15px rgba(0,0,0,0.2),
    0 5px 20px rgba(0,0,0,0.1);
  cursor: pointer;
}

.energy-fill {
  position: absolute;
  bottom: 0;
  width: 100%;
  height: calc(var(--energy-level) * 1%);
  background: linear-gradient(
    to top, 
    #00b4db, 
    #0083b0
  );
  transition: height 0.5s ease-out;
}

.energy-text {
  position: absolute;
  top: 50%;
  left: 50%;
  transform: translate(-50%, -50%);
  font-size: 2rem;
  font-weight: bold;
  color: white;
  text-shadow: 0 0 5px rgba(0,0,0,0.5);
  z-index: 2;
}
</style>

高级效果增强

添加粒子动画提升视觉冲击力:

vue实现能量球

// 在 methods 中添加粒子效果方法
generateParticles() {
  const ball = this.$el.querySelector('.energy-ball')
  for (let i = 0; i < 10; i++) {
    const particle = document.createElement('div')
    particle.classList.add('energy-particle')
    particle.style.left = `${Math.random() * 100}%`
    particle.style.animationDelay = `${Math.random() * 0.5}s`
    ball.appendChild(particle)
  }
}

对应 CSS 粒子样式:

.energy-particle {
  position: absolute;
  width: 4px;
  height: 4px;
  background: white;
  border-radius: 50%;
  bottom: 0;
  opacity: 0;
  animation: float-up 1.5s ease-in infinite;
}

@keyframes float-up {
  0% {
    transform: translateY(0);
    opacity: 1;
  }
  100% {
    transform: translateY(-100px);
    opacity: 0;
  }
}

响应式交互

添加能量耗尽警告效果:

watch: {
  energyLevel(newVal) {
    if (newVal < 20) {
      this.$el.querySelector('.energy-ball').classList.add('warning')
    } else {
      this.$el.querySelector('.energy-ball').classList.remove('warning')
    }
  }
}

警告状态样式:

.energy-ball.warning {
  animation: pulse 0.8s infinite alternate;
}

@keyframes pulse {
  from {
    box-shadow: 0 0 0 0 rgba(255, 50, 50, 0.7);
  }
  to {
    box-shadow: 0 0 0 10px rgba(255, 50, 50, 0);
  }
}

这个实现方案包含了完整的交互逻辑和视觉效果,通过点击能量球可以增加能量值,能量低于20%时会触发警告动画,同时伴有粒子上升效果增强视觉反馈。

标签: 能量vue
分享给朋友:

相关文章

vue设计与实现目录

vue设计与实现目录

以下是《Vue设计与实现》一书的典型目录结构(根据常见技术书籍及Vue核心内容整理): 响应式系统 响应式数据的基本原理 依赖收集与触发更新 实现简易响应式系统 Proxy与Reflec…

vue实现管道

vue实现管道

Vue 中实现管道(Pipe)功能 在 Vue 中可以通过过滤器(Filters)或计算属性(Computed Properties)实现类似管道的功能,将数据经过多个处理步骤后输出。 使用过滤器…

vue实现批量

vue实现批量

Vue 实现批量操作的方法 在 Vue 中实现批量操作通常涉及选择多个项目并执行统一处理,例如批量删除、批量更新等。以下是几种常见实现方式: 表格多选批量操作 使用 el-table 配合复选框实…

vue实现键盘

vue实现键盘

Vue 实现键盘功能 在Vue中实现键盘功能通常涉及监听键盘事件、处理输入以及渲染虚拟键盘界面。以下是几种常见的实现方式: 监听键盘事件 通过@keydown或@keyup指令监听键盘事件,适用于需…

vue实现route

vue实现route

Vue 路由实现方法 Vue 中实现路由通常使用 vue-router 库,这是 Vue 官方推荐的路由管理器。以下是具体实现步骤: 安装 vue-router 通过 npm 或 yarn 安…

vue实现节流

vue实现节流

vue实现节流的方法 在Vue中实现节流(throttle)功能,通常用于限制高频事件的触发频率,例如滚动、输入或按钮点击。以下是几种常见的实现方式: 使用Lodash的throttle函数 安装…