vue实现骰子
Vue 实现骰子效果
基本结构
在Vue中实现骰子效果可以通过数据绑定和动态样式实现。创建一个骰子组件,包含6个面,每个面代表不同的点数。
<template>
<div class="dice-container">
<div class="dice" :class="'show-' + currentFace" @click="rollDice">
<div class="face face-1">●</div>
<div class="face face-2">● ●</div>
<div class="face face-3">● ● ●</div>
<div class="face face-4">● ●<br>● ●</div>
<div class="face face-5">● ●<br>●<br>● ●</div>
<div class="face face-6">● ● ●<br>● ● ●</div>
</div>
</div>
</template>
样式设计
使用CSS 3D变换创建立方体效果,每个面定位到不同位置。
<style scoped>
.dice-container {
perspective: 1000px;
margin: 50px;
}
.dice {
width: 100px;
height: 100px;
position: relative;
transform-style: preserve-3d;
transition: transform 1s ease;
}
.face {
position: absolute;
width: 100%;
height: 100%;
border: 2px solid #000;
border-radius: 10px;
display: flex;
justify-content: center;
align-items: center;
font-size: 24px;
background: white;
}
.face-1 { transform: rotateY(0deg) translateZ(50px); }
.face-2 { transform: rotateY(180deg) translateZ(50px); }
.face-3 { transform: rotateY(90deg) translateZ(50px); }
.face-4 { transform: rotateY(-90deg) translateZ(50px); }
.face-5 { transform: rotateX(90deg) translateZ(50px); }
.face-6 { transform: rotateX(-90deg) translateZ(50px); }
.show-1 { transform: rotateY(0deg); }
.show-2 { transform: rotateY(180deg); }
.show-3 { transform: rotateY(90deg); }
.show-4 { transform: rotateY(-90deg); }
.show-5 { transform: rotateX(90deg); }
.show-6 { transform: rotateX(-90deg); }
</style>
逻辑实现
添加点击事件和随机数生成功能,控制骰子旋转动画和最终显示的面。
<script>
export default {
data() {
return {
currentFace: 1,
isRolling: false
}
},
methods: {
rollDice() {
if (this.isRolling) return;
this.isRolling = true;
// 添加旋转动画
this.currentFace = 'rotate';
setTimeout(() => {
// 随机生成1-6的数字
this.currentFace = Math.floor(Math.random() * 6) + 1;
this.isRolling = false;
}, 1000);
}
}
}
</script>
动画优化
为旋转动画添加额外样式,使骰子在滚动时看起来更自然。
.dice.rotate {
animation: rotate 1s infinite linear;
}
@keyframes rotate {
0% { transform: rotateX(0deg) rotateY(0deg); }
100% { transform: rotateX(360deg) rotateY(360deg); }
}
响应式设计
使骰子在不同屏幕尺寸下保持合适的大小。
@media (max-width: 600px) {
.dice {
width: 80px;
height: 80px;
}
.face {
font-size: 18px;
}
}
声音效果
可选地添加滚动声音效果增强用户体验。

methods: {
rollDice() {
// 播放滚动声音
const audio = new Audio('dice-roll.mp3');
audio.play();
// 其余滚动逻辑...
}
}
这个实现包含了完整的3D骰子效果,点击交互,随机数生成和动画过渡。可以根据需要调整大小、颜色和动画时长。






