vue实现投币动画效果
实现投币动画效果的方法
在Vue中实现投币动画效果,可以通过CSS动画和Vue的过渡系统结合完成。以下是一个完整的实现方案。
创建硬币组件
定义一个硬币组件,包含硬币的样式和动画效果。

<template>
<div class="coin" :class="{ 'animate': isAnimating }" @click="flip">
<div class="coin-front"></div>
<div class="coin-back"></div>
</div>
</template>
<script>
export default {
data() {
return {
isAnimating: false
}
},
methods: {
flip() {
this.isAnimating = true;
setTimeout(() => {
this.isAnimating = false;
}, 1000);
}
}
}
</script>
添加CSS样式和动画
定义硬币的样式和翻转动画效果。
.coin {
width: 60px;
height: 60px;
position: relative;
margin: 20px;
transform-style: preserve-3d;
cursor: pointer;
}
.coin-front, .coin-back {
width: 100%;
height: 100%;
border-radius: 50%;
position: absolute;
backface-visibility: hidden;
}
.coin-front {
background: gold;
display: flex;
justify-content: center;
align-items: center;
font-weight: bold;
}
.coin-back {
background: silver;
transform: rotateY(180deg);
}
.animate {
animation: flip 1s ease-out;
}
@keyframes flip {
0% {
transform: rotateY(0);
}
50% {
transform: rotateY(180deg);
}
100% {
transform: rotateY(360deg);
}
}
添加投掷效果
如果需要硬币投掷到某个容器的效果,可以添加位移动画。

@keyframes toss {
0% {
transform: translateY(0) rotateY(0);
}
50% {
transform: translateY(-100px) rotateY(180deg);
}
100% {
transform: translateY(0) rotateY(360deg);
}
}
.toss-animate {
animation: toss 1s ease-out;
}
在父组件中使用
在父组件中引入硬币组件并控制动画。
<template>
<div>
<Coin @click="handleCoinClick" />
<div class="coin-slot"></div>
</div>
</template>
<script>
import Coin from './Coin.vue';
export default {
components: {
Coin
},
methods: {
handleCoinClick() {
// 可以在这里添加投币逻辑
}
}
}
</script>
<style>
.coin-slot {
width: 80px;
height: 20px;
background: #333;
margin: 0 auto;
}
</style>
使用Vue过渡效果
Vue的过渡系统可以用来实现更复杂的动画序列。
<template>
<transition name="coin-toss">
<div v-if="showCoin" class="coin"></div>
</transition>
</template>
<style>
.coin-toss-enter-active {
animation: toss 1s;
}
.coin-toss-leave-active {
animation: toss 1s reverse;
}
</style>
以上方法可以根据实际需求调整动画时间、样式和触发逻辑,实现不同风格的投币动画效果。






