当前位置:首页 > VUE

vue实现骰子

2026-01-07 19:44:49VUE

Vue 实现骰子功能

创建 Vue 组件

在 Vue 项目中创建一个骰子组件,例如 Dice.vue。该组件包含骰子的外观和逻辑。

<template>
  <div class="dice" @click="rollDice">
    <div class="face" :class="'face-' + currentFace">
      {{ currentFace }}
    </div>
  </div>
</template>

<script>
export default {
  data() {
    return {
      currentFace: 1,
      rolling: false
    }
  },
  methods: {
    rollDice() {
      if (this.rolling) return
      this.rolling = true
      const rolls = 10 + Math.floor(Math.random() * 10)
      let rollCount = 0
      const rollInterval = setInterval(() => {
        this.currentFace = Math.floor(Math.random() * 6) + 1
        rollCount++
        if (rollCount >= rolls) {
          clearInterval(rollInterval)
          this.rolling = false
        }
      }, 100)
    }
  }
}
</script>

<style scoped>
.dice {
  width: 100px;
  height: 100px;
  perspective: 1000px;
  cursor: pointer;
}

.face {
  width: 100%;
  height: 100%;
  position: absolute;
  border-radius: 10px;
  background: white;
  border: 2px solid #333;
  display: flex;
  justify-content: center;
  align-items: center;
  font-size: 2rem;
  font-weight: bold;
  transition: transform 0.5s;
}

.face-1 { transform: rotateX(0deg) rotateY(0deg); }
.face-2 { transform: rotateX(-90deg) rotateY(0deg); }
.face-3 { transform: rotateX(0deg) rotateY(90deg); }
.face-4 { transform: rotateX(0deg) rotateY(-90deg); }
.face-5 { transform: rotateX(90deg) rotateY(0deg); }
.face-6 { transform: rotateX(180deg) rotateY(0deg); }
</style>

使用 CSS 动画增强效果

为了更好的视觉效果,可以添加 CSS 动画使骰子旋转更自然。

@keyframes roll {
  0% { transform: rotateX(0deg) rotateY(0deg); }
  25% { transform: rotateX(180deg) rotateY(180deg); }
  50% { transform: rotateX(360deg) rotateY(360deg); }
  75% { transform: rotateX(540deg) rotateY(540deg); }
  100% { transform: rotateX(720deg) rotateY(720deg); }
}

.dice.rolling .face {
  animation: roll 1s infinite;
}

在父组件中使用

在需要使用骰子的父组件中引入并注册 Dice 组件。

vue实现骰子

<template>
  <div>
    <h3>点击骰子开始滚动</h3>
    <Dice />
  </div>
</template>

<script>
import Dice from './Dice.vue'

export default {
  components: {
    Dice
  }
}
</script>

添加声音效果(可选)

为了增强用户体验,可以添加骰子滚动的声音效果。

// 在 rollDice 方法中添加
const audio = new Audio('dice-roll.mp3')
audio.play()

响应式设计

确保骰子在不同设备上都能正常显示,可以添加媒体查询调整大小。

vue实现骰子

@media (max-width: 600px) {
  .dice {
    width: 80px;
    height: 80px;
  }
}

可配置属性

使骰子组件更灵活,允许从父组件传入大小、颜色等属性。

props: {
  size: {
    type: Number,
    default: 100
  },
  color: {
    type: String,
    default: '#333'
  }
}

然后在模板和样式中使用这些 props:

<div class="dice" :style="{ width: size + 'px', height: size + 'px' }">
  <div class="face" :style="{ borderColor: color }">
    {{ currentFace }}
  </div>
</div>

标签: 骰子vue
分享给朋友:

相关文章

vue实现人脸识别比对

vue实现人脸识别比对

Vue 实现人脸识别比对的方法 使用现成的人脸识别 API 通过调用第三方人脸识别 API(如 Face++、百度 AI、腾讯云等)实现比对功能。注册开发者账号获取 API Key 和 Secret,…

vue实现防抖节流

vue实现防抖节流

Vue 中实现防抖(Debounce) 防抖的核心是延迟执行函数,在连续触发时取消前一次的调用,只执行最后一次。适用于输入框搜索、窗口大小调整等场景。 方法1:使用 Lodash 的 _.debou…

vue 实现toast

vue 实现toast

vue 实现 toast 的方法 在 Vue 中实现 Toast 提示功能可以通过多种方式,以下是几种常见的实现方法: 使用第三方库 Vue 生态中有许多成熟的 Toast 库,例如 vue-toa…

vue 实现筛选

vue 实现筛选

实现筛选功能的基本方法 在Vue中实现筛选功能通常涉及以下几个核心步骤: 数据绑定与筛选逻辑 使用v-model绑定筛选条件到Vue实例的数据属性,结合计算属性实现动态筛选: data() {…

vue实现 单选

vue实现 单选

实现 Vue 单选功能 在 Vue 中实现单选功能可以通过多种方式完成,以下是几种常见的方法: 使用 v-model 绑定单选按钮 通过 v-model 可以轻松实现单选功能,将单选按钮的值绑定到同…

vue实现视频

vue实现视频

Vue 实现视频播放的方法 在 Vue 项目中实现视频播放可以通过多种方式完成,以下是几种常见的方法: 使用 HTML5 的 <video> 标签 在 Vue 组件中直接使用 HTML…