在 UniApp 中实现翻书动效,可以通过 CSS 3D 变换和 JavaScript 控制动画状态来实现。以下是一个简单的翻书动效示例,使用 view 组件和 CSS 样式模拟翻页效果。
实现思路:
- 结构:使用两个
view 分别代表书页的正面和背面。
- 3D 变换:通过 CSS 的
transform 属性实现旋转效果。
- 交互:通过点击事件触发翻页动画,使用
transition 控制动画过渡。
示例代码:
<template>
<view class="book-container">
<view class="page" :class="{ 'flipped': isFlipped }" @click="flipPage">
<view class="front">正面内容</view>
<view class="back">背面内容</view>
</view>
</view>
</template>
<script>
export default {
data() {
return {
isFlipped: false
};
},
methods: {
flipPage() {
this.isFlipped = !this.isFlipped;
}
}
};
</script>
<style>
.book-container {
perspective: 1000px; /* 设置 3D 透视视角 */
margin: 50px auto;
width: 200px;
height: 300px;
}
.page {
width: 100%;
height: 100%;
position: relative;
transform-style: preserve-3d; /* 保持 3D 空间 */
transition: transform 0.6s; /* 翻页动画时长 */
}
.page.flipped {
transform: rotateY(-180deg); /* 沿 Y 轴旋转 180 度实现翻页 */
}
.front, .back {
position: absolute;
width: 100%;
height: 100%;
backface-visibility: hidden; /* 隐藏背面 */
border: 1px solid #ccc;
display: flex;
align-items: center;
justify-content: center;
font-size: 18px;
}
.front {
background: #f9f9f9;
}
.back {
background: #e0e0e0;
transform: rotateY(180deg); /* 背面初始旋转 180 度 */
}
</style>
说明:
- perspective:定义 3D 元素的透视视图,值越小透视效果越强。
- transform-style: preserve-3d:确保子元素在 3D 空间内变换。
- backface-visibility: hidden:隐藏元素的背面,避免翻页时内容重叠。
- 点击页面触发
flipPage 方法,通过切换 isFlipped 状态控制翻页动画。
扩展建议:
- 多页翻书:可以通过数组管理多个页面,动态切换内容和动画。
- 手势控制:集成
touch 事件实现滑动翻页。
- 性能优化:对于复杂动效,可使用
transform3d 触发 GPU 加速。
以上代码提供了一个基础翻书效果,可根据实际需求调整样式和交互逻辑。