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教程(2):网页边框半径和网页圆角
Apr 02 HTML / CSS
纯CSS3实现8组超炫酷鼠标滑过图片动画
Mar 16 HTML / CSS
CSS3中使用RGBa来调节透明度的教程
May 09 HTML / CSS
html5 offlline 缓存使用示例
Jun 24 HTML / CSS
a标签下载链接的简单实现
Sep 13 HTML / CSS
详解HTML5之pushstate、popstate操作history,无刷新改变当前url
Mar 15 HTML / CSS
高清屏下canvas重置尺寸引发的问题的解决
Oct 14 HTML / CSS
记一次高分屏下canvas模糊问题
Feb 17 HTML / CSS
浅谈移动端中的视口(viewport)的具体使用
Apr 13 HTML / CSS
CSS3 制作的书本翻页特效
Apr 13 HTML / CSS
css 边框添加四个角的实现代码
Oct 16 HTML / CSS
css3带你实现3D转换效果
Feb 24 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
如何在PHP中使用Oracle数据库(6)
2006/10/09 PHP
PHPMyAdmin 快速配置方法
2009/05/11 PHP
php一次性删除前台checkbox多选内容的方法
2013/09/22 PHP
PHP模板引擎Smarty内置变量调解器用法详解
2016/04/11 PHP
Google Suggest ;-) 基于js的动态下拉菜单
2006/10/11 Javascript
extjs关于treePanel+chekBox全部选中以及清空选中问题探讨
2013/04/02 Javascript
C++中的string类的用法小结
2015/08/07 Javascript
Vue.js每天必学之计算属性computed与$watch
2016/09/05 Javascript
js数组操作方法总结(必看篇)
2016/11/22 Javascript
JS验证字符串功能
2017/02/22 Javascript
详解nodejs微信公众号开发——2.自动回复
2017/04/10 NodeJs
angular2 ng2 @input和@output理解及示例
2017/10/10 Javascript
vue-cli项目优化方法- 缩短首屏加载时间
2018/04/01 Javascript
JS实现简单获取最近7天和最近3天日期的方法
2018/04/18 Javascript
vue-router+nginx 非根路径配置方法
2018/06/30 Javascript
Vue  webpack 项目自动打包压缩成zip文件的方法
2019/07/24 Javascript
详解Vuex下Store的模块化拆分实践
2019/07/31 Javascript
python通过pil模块获得图片exif信息的方法
2015/03/16 Python
python实现颜色rgb和hex相互转换的函数
2015/03/19 Python
python常见数制转换实例分析
2015/05/09 Python
通过python将大量文件按修改时间分类的方法
2018/10/17 Python
对python3中的RE(正则表达式)-详细总结
2019/07/23 Python
pytorch中使用cuda扩展的实现示例
2020/02/12 Python
python如何将图片转换素描画
2020/09/08 Python
css3闪亮进度条效果实现思路及代码
2013/04/17 HTML / CSS
中学教师请假制度
2014/02/03 职场文书
小学生中国梦演讲稿
2014/04/23 职场文书
2014年幼儿园后勤工作总结
2014/11/10 职场文书
2015年大学组织委员个人工作总结
2015/10/23 职场文书
执行力心得体会范文
2016/01/11 职场文书
导游词之杭州岳王庙
2019/11/13 职场文书
Python实现单例模式的5种方法
2021/06/15 Python
详解CSS3.0(Cascading Style Sheet) 层叠级联样式表
2021/07/16 HTML / CSS
Nginx报错104:Connection reset by peer问题的解决及分析
2022/07/23 Servers
Win10系统搭建ftp文件服务器详细教程
2022/08/05 Servers