vue实现卡片翻转
Vue 实现卡片翻转效果
卡片翻转效果可以通过 CSS 3D 变换和 Vue 的过渡系统实现。以下是两种常见实现方式:
基础 CSS 3D 翻转
<template>
<div class="flip-card" @click="isFlipped = !isFlipped">
<div class="flip-card-inner" :class="{ 'flipped': isFlipped }">
<div class="flip-card-front">
<!-- 正面内容 -->
<h3>Front Side</h3>
</div>
<div class="flip-card-back">
<!-- 背面内容 -->
<h3>Back Side</h3>
</div>
</div>
</div>
</template>
<script>
export default {
data() {
return {
isFlipped: false
}
}
}
</script>
<style>
.flip-card {
perspective: 1000px;
width: 300px;
height: 200px;
}
.flip-card-inner {
position: relative;
width: 100%;
height: 100%;
transition: transform 0.6s;
transform-style: preserve-3d;
}
.flip-card-front, .flip-card-back {
position: absolute;
width: 100%;
height: 100%;
backface-visibility: hidden;
display: flex;
align-items: center;
justify-content: center;
border-radius: 10px;
}
.flip-card-front {
background-color: #42b983;
color: white;
}
.flip-card-back {
background-color: #35495e;
color: white;
transform: rotateY(180deg);
}
.flip-card-inner.flipped {
transform: rotateY(180deg);
}
</style>
使用 Vue Transition 组件
<template>
<div class="flip-container" @click="isFlipped = !isFlipped">
<transition name="flip">
<div v-if="!isFlipped" key="front" class="card front">
Front Content
</div>
<div v-else key="back" class="card back">
Back Content
</div>
</transition>
</div>
</template>
<script>
export default {
data() {
return {
isFlipped: false
}
}
}
</script>
<style>
.flip-container {
perspective: 1000px;
width: 300px;
height: 200px;
}
.card {
position: absolute;
width: 100%;
height: 100%;
backface-visibility: hidden;
display: flex;
align-items: center;
justify-content: center;
border-radius: 10px;
}
.front {
background: #42b983;
color: white;
}
.back {
background: #35495e;
color: white;
transform: rotateY(180deg);
}
.flip-enter-active {
animation: flip-in 0.6s;
}
.flip-leave-active {
animation: flip-out 0.6s;
}
@keyframes flip-in {
from { transform: rotateY(90deg); }
to { transform: rotateY(0deg); }
}
@keyframes flip-out {
from { transform: rotateY(0deg); }
to { transform: rotateY(90deg); }
}
</style>
进阶技巧:3D 翻转效果
.flip-card-3d {
transform-style: preserve-3d;
animation: flip3d 2s infinite;
}
@keyframes flip3d {
0% { transform: rotateY(0deg); }
50% { transform: rotateY(180deg); }
100% { transform: rotateY(360deg); }
}
注意事项
perspective属性设置观察者与 z=0 平面的距离,值越小3D效果越明显transform-style: preserve-3d确保子元素保持3D空间backface-visibility: hidden隐藏元素的背面- 对于移动设备,可以添加
-webkit-backface-visibility前缀确保兼容性
以上方法可以根据实际需求调整动画时间、缓动函数和翻转方向(rotateX或rotateY)。







