当前位置:首页 > VUE

vue实现砸金蛋

2026-03-29 20:05:06VUE

实现砸金蛋的Vue组件

准备工作

安装Vue和相关依赖

npm install vue hammerjs

组件结构

创建金蛋组件模板

vue实现砸金蛋

<template>
  <div class="egg-container">
    <div 
      class="egg" 
      @click="crackEgg"
      :class="{ 'cracked': isCracked }"
    >
      <div class="prize" v-if="isCracked">
        {{ prize }}
      </div>
    </div>
  </div>
</template>

组件逻辑

实现砸蛋交互功能

<script>
export default {
  data() {
    return {
      isCracked: false,
      prize: '',
      prizes: ['一等奖', '二等奖', '谢谢参与']
    }
  },
  methods: {
    crackEgg() {
      if(this.isCracked) return;

      this.isCracked = true;
      const randomIndex = Math.floor(Math.random() * this.prizes.length);
      this.prize = this.prizes[randomIndex];

      // 触发父组件事件
      this.$emit('egg-cracked', this.prize);
    }
  }
}
</script>

样式设计

添加金蛋动画效果

vue实现砸金蛋

<style scoped>
.egg-container {
  display: flex;
  justify-content: center;
  padding: 20px;
}

.egg {
  width: 150px;
  height: 200px;
  background: linear-gradient(to bottom, #FFD700, #FFA500);
  border-radius: 50% 50% 50% 50% / 60% 60% 40% 40%;
  cursor: pointer;
  position: relative;
  box-shadow: 0 10px 15px rgba(0,0,0,0.2);
  transition: transform 0.3s;
}

.egg:hover {
  transform: scale(1.05);
}

.cracked {
  background: linear-gradient(to bottom, #D3D3D3, #A9A9A9);
  animation: crack 0.5s forwards;
}

.prize {
  position: absolute;
  top: 50%;
  left: 50%;
  transform: translate(-50%, -50%);
  font-size: 18px;
  font-weight: bold;
  color: #FF4500;
}

@keyframes crack {
  0% { transform: scale(1); }
  50% { transform: scale(1.1); }
  100% { transform: scale(1); }
}
</style>

使用组件

在父组件中使用金蛋组件

<template>
  <div>
    <h3>砸金蛋游戏</h3>
    <EggComponent @egg-cracked="handlePrize" />
  </div>
</template>

<script>
import EggComponent from './EggComponent.vue';

export default {
  components: {
    EggComponent
  },
  methods: {
    handlePrize(prize) {
      alert(`恭喜获得: ${prize}`);
    }
  }
}
</script>

增强功能

添加Hammer.js实现手势操作

import Hammer from 'hammerjs';

mounted() {
  const hammer = new Hammer(this.$el.querySelector('.egg'));
  hammer.on('swipe', () => {
    this.crackEgg();
  });
}

注意事项

  1. 确保组件样式隔离使用scoped
  2. 考虑移动端适配添加响应式设计
  3. 可以扩展更多动画效果增强交互体验
  4. 奖品数据可以从后端API动态获取

标签: vue砸金蛋
分享给朋友:

相关文章

vue实现走势图

vue实现走势图

Vue 实现走势图的方法 使用 ECharts 库 ECharts 是一个强大的数据可视化库,支持多种图表类型,包括走势图(折线图)。在 Vue 项目中可以通过 vue-echarts 封装库或直接使…

vue实现后退

vue实现后退

Vue 实现后退功能的方法 在 Vue 中实现后退功能通常可以通过以下几种方式完成,具体取决于应用场景和需求。 使用 window.history API 通过原生 JavaScript 的 win…

vue实现答题

vue实现答题

Vue 实现答题功能 数据结构设计 使用 Vue 的响应式特性管理题目和答案数据。通常需要以下数据结构: data() { return { questions: [ {…

vue实现layout

vue实现layout

Vue 实现 Layout 布局的方法 在 Vue 中实现 Layout 布局通常涉及路由嵌套、组件化设计和动态渲染。以下是几种常见的实现方式: 使用嵌套路由 通过 Vue Router 的嵌套路由…

vue实现tab

vue实现tab

Vue 实现 Tab 切换功能 在 Vue 中实现 Tab 切换功能可以通过多种方式完成,以下是几种常见的实现方法: 使用 v-if 和 v-show 指令 通过绑定 v-if 或 v-show 来…

vue select实现搜索

vue select实现搜索

实现 Vue Select 搜索功能的方法 在 Vue 中实现 select 组件的搜索功能,可以通过原生 HTML select 结合自定义搜索逻辑,或使用第三方库如 vue-select 来实现。…