css3实现书本翻页效果的示例代码


Posted in HTML / CSS onMarch 08, 2021

关键要点:
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 书本翻页内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章,希望大家以后多多支持三水点靠木!

HTML / CSS 相关文章推荐
详解CSS3开启硬件加速的使用和坑
Aug 21 HTML / CSS
CSS3盒子模型详解
Apr 24 HTML / CSS
CSS3实现头像旋转效果
Mar 13 HTML / CSS
CSS3 边框效果
Nov 04 HTML / CSS
纯CSS3实现圆圈动态发光特效动画的示例代码
Mar 08 HTML / CSS
IE9下html5初试小刀
Sep 21 HTML / CSS
html5 Canvas画图教程(2)—画直线与设置线条的样式如颜色/端点/交汇点
Jan 09 HTML / CSS
canvas实现扭蛋机动画效果的示例代码
Oct 17 HTML / CSS
详解移动端h5页面根据屏幕适配的四种方案
Apr 15 HTML / CSS
浅析图片上传及canvas压缩的流程
Jun 10 HTML / CSS
CSS3 菱形拼图实现只旋转div 背景图片不旋转功能
Mar 30 HTML / CSS
原生CSS实现文字无限轮播的通用方法
Mar 30 HTML / CSS
纯CSS3实现圆圈动态发光特效动画的示例代码
Mar 08 #HTML / CSS
巧用 CSS3的webkit-box-reflect 倒影实现各类动效
Mar 05 #HTML / CSS
详解利用css3的var()实现运行时改变scss的变量值
Mar 02 #HTML / CSS
从一次项目重构说起CSS3自定义变量在项目的使用方法
Mar 01 #HTML / CSS
CSS3 filter(滤镜)实现网页灰色或者黑色模式的示例代码
Feb 24 #HTML / CSS
CSS3中的弹性布局em运用入门详解 1em等于多少像素
Feb 08 #HTML / CSS
css3动画鼠标放上图片逐渐变大鼠标离开图片逐渐缩小效果
Jan 27 #HTML / CSS
You might like
检测是否已安装 .NET Framework 3.5的js脚本
2009/02/14 Javascript
页面右下角弹出提示框示例代码js版
2013/08/02 Javascript
js带按钮的提示框可供选择示例代码
2013/09/17 Javascript
AJAX跨域请求json数据的实现方法
2013/11/11 Javascript
javascript动态添加、修改、删除对象的属性与方法详解
2014/01/27 Javascript
详细解读AngularJS中的表单验证编程
2015/06/19 Javascript
使用AngularJS实现可伸缩的页面切换的方法
2015/06/19 Javascript
理解javascript中的原型和原型链
2015/07/30 Javascript
基于Bootstrap实现Material Design风格表单插件 附源码下载
2016/04/18 Javascript
jquery中的常见问题及快速解决方法小结
2016/06/14 Javascript
json实现添加、遍历与删除属性的方法
2016/06/17 Javascript
jQuery与JavaScript节点创建方法的对比
2016/11/18 Javascript
微信小程序实现animation动画
2018/01/26 Javascript
微信小程序实现form表单本地储存数据
2019/06/27 Javascript
vue自定义标签和单页面多路由的实现代码
2020/05/03 Javascript
[06:07]刀塔密之二:攻之吾命受之吾幸
2014/07/03 DOTA
python实现屏保计时器的示例代码
2018/08/08 Python
解决Python中list里的中文输出到html模板里的问题
2018/12/17 Python
Python切片操作去除字符串首尾的空格
2019/04/22 Python
Python Opencv实现图像轮廓识别功能
2020/03/23 Python
对django的User模型和四种扩展/重写方法小结
2019/08/17 Python
python+rsync精确同步指定格式文件
2019/08/29 Python
python调用c++返回带成员指针的类指针实例
2019/12/12 Python
Python模块/包/库安装的六种方法及区别
2020/02/24 Python
python游戏开发的五个案例分享
2020/03/09 Python
营销主管自我评价怎么写
2013/09/19 职场文书
本科毕业生专业自荐书范文
2014/02/05 职场文书
论文评语大全
2014/04/29 职场文书
奥林匹克运动会口号
2014/06/19 职场文书
医德医风个人工作总结2014
2014/11/14 职场文书
反四风问题学习心得体会
2016/01/22 职场文书
护士心得体会范文
2016/01/25 职场文书
浅谈Redis在直播场景的实践方案
2021/04/27 Redis
Python绘制地图神器folium的新人入门指南
2021/05/23 Python
Python anaconda安装库命令详解
2021/10/16 Python
使用 CSS 构建强大且酷炫的粒子动画效果
2022/08/14 HTML / CSS