关键要点:
1.css3 3d动画的掌握
2.如何解决翻转后页面内容的改变
3.如何保持书本一直处于居中位置
代码总览
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
</head>
<style>
.book{
margin: auto;
margin-top: 2rem;
transform: translate(0,0);
perspective: 5000px;
max-width: 40%;
height: 800px;
position: relative;
transition:all 1s ease;
}
.page{
position: absolute;
width: 100%;
height: 100%;
top: 0;
right: 0;
background-color: pink;
cursor: pointer;
transition:all 1s ease;
transform-origin: left center;
transform-style: preserve-3d;
}
.active{
z-index: 1;
}
.page.flipped{
transform:rotateY(-180deg)
}
.back,.front{
text-align: center;
position: absolute;
backface-visibility: hidden;
width: 100%;
height: 100%;
}
.back{
transform:rotateY(180deg)
}
</style>
<body>
<div class="book">
<div class="page active">
<div class="front">封面</div>
<div class="back">1</div>
</div>
<div class="page">
<div class="front">2</div>
<div class="back">3</div>
</div>
<div class="page">
<div class="front">4</div>
<div class="back">5</div>
</div>
<div class="page">
<div class="front">6</div>
<div class="back">尾面</div>
</div>
</div>
</body>
<script>
let pages = document.getElementsByClassName('page')
let book = document.getElementsByClassName('book')[0]
function bookMove(drect){
if(drect==='right'){
book.style.transform = 'translate(50%,0)'
}else if(drect==='left'){
book.style.transform = 'translate(0,0)'
}else{
book.style.transform = 'translate(100%,0)'
}
}
for(let i = 0;i<pages.length;i++){
pages[i].addEventListener('click',()=>{
if(pages[i].classList.contains('flipped')){
pages[i].classList.remove('flipped')
pages[i].classList.add('active')
if(i===0){
bookMove('left')
}
if(pages[i].nextElementSibling!==null){
pages[i].nextElementSibling.classList.remove('active')
}else{
bookMove('right')
}
}else{
pages[i].classList.add('flipped')
pages[i].classList.remove('active')
if(i===0){
bookMove('right')
}
if(pages[i].nextElementSibling!==null){
pages[i].nextElementSibling.classList.add('active')
}else{
bookMove('close')
}
}
})
}
</script>
</html>
要点分析
css3动画属性解释:
perspective: 5000px; 这里是透视属性,可以简单认为是实现了“近大远小”效果的属性
这里需要注意perspective需要设置在进行了3d变换的元素的父元素上,因为进行3d变换
的元素只有以父元素为背景做透视变换才能看到效果。
transition:all 1s ease;这里是过度属性,可以设置过度时间以及应用的缓动函数
transform-origin: left center;;这个属性可以设置变换属性的起始点,这里的意思是以 左中为点进行绕y轴旋转
transform-style: preserve-3d;;这个属性可以让设置了该属性的元素的子元素也能呈现相同 的基于父元素的透视,前提是子元素也进行了3d变换。
解决页面内容的显示问题:
backface-visibility: hidden;让进行了180度旋转的元素隐藏,即背面不可视
运用这个属性可以让页面1旋转180度后隐藏而从-180度旋转为0度的页面2显示,从而实现 书本内容的切换
解决书本居中页面的问题:
transform: translate(0,0) 通过平移属性,解决此问题
剩下的就是用js添加点击事件,控制元素样式实现翻页动画
css3,书本翻页
稳了!魔兽国服回归的3条重磅消息!官宣时间再确认!
昨天有一位朋友在大神群里分享,自己亚服账号被封号之后居然弹出了国服的封号信息对话框。
这里面让他访问的是一个国服的战网网址,com.cn和后面的zh都非常明白地表明这就是国服战网。
而他在复制这个网址并且进行登录之后,确实是网易的网址,也就是我们熟悉的停服之后国服发布的暴雪游戏产品运营到期开放退款的说明。这是一件比较奇怪的事情,因为以前都没有出现这样的情况,现在突然提示跳转到国服战网的网址,是不是说明了简体中文客户端已经开始进行更新了呢?
更新动态
- 小骆驼-《草原狼2(蓝光CD)》[原抓WAV+CUE]
- 群星《欢迎来到我身边 电影原声专辑》[320K/MP3][105.02MB]
- 群星《欢迎来到我身边 电影原声专辑》[FLAC/分轨][480.9MB]
- 雷婷《梦里蓝天HQⅡ》 2023头版限量编号低速原抓[WAV+CUE][463M]
- 群星《2024好听新歌42》AI调整音效【WAV分轨】
- 王思雨-《思念陪着鸿雁飞》WAV
- 王思雨《喜马拉雅HQ》头版限量编号[WAV+CUE]
- 李健《无时无刻》[WAV+CUE][590M]
- 陈奕迅《酝酿》[WAV分轨][502M]
- 卓依婷《化蝶》2CD[WAV+CUE][1.1G]
- 群星《吉他王(黑胶CD)》[WAV+CUE]
- 齐秦《穿乐(穿越)》[WAV+CUE]
- 发烧珍品《数位CD音响测试-动向效果(九)》【WAV+CUE】
- 邝美云《邝美云精装歌集》[DSF][1.6G]
- 吕方《爱一回伤一回》[WAV+CUE][454M]