当前位置:首页 > VUE

vue代码抛硬币实现

2026-02-20 23:46:13VUE

实现思路

使用Vue的数据绑定和事件处理功能,通过随机数生成模拟抛硬币的正反面结果,并添加动画效果增强交互体验。

基础实现代码

<template>
  <div class="coin-container">
    <div 
      class="coin" 
      :class="{ 'heads': isHeads, 'tails': !isHeads, 'flipping': isFlipping }"
      @click="flipCoin"
    >
      {{ coinFace }}
    </div>
    <p>点击硬币进行抛掷</p>
    <p>历史记录: {{ history.join(', ') }}</p>
  </div>
</template>

<script>
export default {
  data() {
    return {
      isHeads: true,
      isFlipping: false,
      history: []
    }
  },
  computed: {
    coinFace() {
      return this.isHeads ? '正面' : '反面'
    }
  },
  methods: {
    flipCoin() {
      if (this.isFlipping) return

      this.isFlipping = true
      setTimeout(() => {
        this.isHeads = Math.random() > 0.5
        this.history.push(this.coinFace)
        this.isFlipping = false
      }, 1000)
    }
  }
}
</script>

<style>
.coin-container {
  text-align: center;
  margin-top: 50px;
}

.coin {
  width: 100px;
  height: 100px;
  border-radius: 50%;
  background-color: gold;
  display: inline-flex;
  justify-content: center;
  align-items: center;
  font-size: 20px;
  cursor: pointer;
  transition: transform 1s ease-out;
  box-shadow: 0 0 10px rgba(0,0,0,0.3);
}

.coin.flipping {
  transform: rotateY(1800deg);
}

.heads {
  background-color: gold;
}

.tails {
  background-color: silver;
}
</style>

功能扩展建议

  1. 添加音效增强体验

    // 在methods中添加
    playSound() {
    const audio = new Audio('coin-flip-sound.mp3')
    audio.play()
    }
    // 在flipCoin方法中调用
  2. 统计功能

    data() {
    return {
     stats: {
       heads: 0,
       tails: 0
     }
    }
    },
    methods: {
    updateStats() {
     this.isHeads ? this.stats.heads++ : this.stats.tails++
    }
    }
  3. 3D翻转效果改进

    vue代码抛硬币实现

    .coin {
    transform-style: preserve-3d;
    }
    .coin:before, .coin:after {
    content: '';
    position: absolute;
    width: 100%;
    height: 100%;
    border-radius: 50%;
    backface-visibility: hidden;
    }
    .coin:before {
    background: gold;
    transform: rotateY(0deg);
    }
    .coin:after {
    background: silver;
    transform: rotateY(180deg);
    }

注意事项

  1. 动画持续时间应与随机结果生成时间匹配
  2. 防止连续快速点击导致动画异常
  3. 移动端适配可考虑添加触摸事件支持
  4. 如需更真实效果,可引入物理引擎库模拟抛掷轨迹

标签: 硬币代码
分享给朋友:

相关文章

vue实现登录代码

vue实现登录代码

以下是一个基于 Vue.js 的登录功能实现示例,包含表单验证和异步请求处理: 基础组件结构 <template> <div class="login-container"&g…

vue论坛代码实现

vue论坛代码实现

Vue 论坛代码实现 项目初始化 使用 Vue CLI 或 Vite 创建一个新的 Vue 项目。推荐使用 Vue 3 和 Composition API。 npm create vue@lates…

vue路由实现代码

vue路由实现代码

Vue 路由实现代码 Vue Router 是 Vue.js 的官方路由库,用于构建单页面应用(SPA)。以下是 Vue Router 的基本实现代码示例: 安装 Vue Router 通过 npm…

vue实现左右滑动代码

vue实现左右滑动代码

以下是一个基于 Vue 3 实现左右滑动功能的代码示例,结合手势识别和动画效果: 基础实现(使用 CSS 和事件监听) <template> <div class="slide…

vue代码实现清除缓存

vue代码实现清除缓存

清除浏览器缓存的方法 在Vue项目中清除缓存通常涉及版本控制、强制刷新或服务端配置。以下是几种常见实现方式: 修改文件名添加哈希 通过webpack配置在打包时为静态文件添加哈希值,确保每次更新后文…

如何预览react代码

如何预览react代码

预览 React 代码的方法 本地开发环境预览 安装 Node.js 和 npm/yarn,通过 create-react-app 或 Vite 创建项目后,运行开发服务器(如 npm start)。…