css3实现书本3D翻页效果代码及要点详解
Admin 2021-04-17 群英技术资讯 1236 次浏览
使用css3 3d动画可以实现很多实用的炫酷特效,这篇文章就给大家分享一个模拟书本翻页的动画特效,能用户良好的视觉和交互体验,对大家学习和掌握CSS 3d动画也有一定的参考价值。下面是css3书本翻页效果的具体代码,感兴趣的朋友一起来学习一下吧。
关键要点:
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显示书本翻页效果的介绍,希望大家看完本文有收获,更多css3 3d动画内容大家可以关注其他文章。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:mmqy2019@163.com进行举报,并提供相关证据,查实之后,将立刻删除涉嫌侵权内容。
猜你喜欢
这篇文章主要介绍了AmazeUI在模态框中嵌入表单形成模态输入框,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
这篇文章主要介绍了css中overflow:hidden失效问题的解决方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
有群友问我,使用 CSS 如何实现如下 Loading 效果:这是一个非常有意思的问题。我们知道,使用 CSS,我们可以非常轻松的实现这样一个动画效果:<div></div>div { width: 100px;
本文通过代码给大家介绍css清除默认样式和设置公共样式的方法,需要的朋友参考下吧
层叠性,如有样式冲突,按CSS书写顺序,以最终样式为准。继承性,子标签将继承父标签的某些样式。优先级,当两个或多个规则同时应用于一个元素时,需要考虑权重。
成为群英会员,开启智能安全云计算之旅
立即注册关注或联系群英网络
7x24小时售前:400-678-4567
7x24小时售后:0668-2555666
24小时QQ客服
群英微信公众号
CNNIC域名投诉举报处理平台
服务电话:010-58813000
服务邮箱:service@cnnic.cn
投诉与建议:0668-2555555
Copyright © QY Network Company Ltd. All Rights Reserved. 2003-2020 群英 版权所有
增值电信经营许可证 : B1.B2-20140078 ICP核准(ICP备案)粤ICP备09006778号 域名注册商资质 粤 D3.1-20240008