HTML5 3D书本翻页动画的实现示例


Posted in HTML / CSS onAugust 28, 2019

这是一款十分炫酷的HTML5 3D书本翻页动画,效果相对比较简单,拖拽鼠标模拟用手翻页,更漂亮的是翻页过程中,呈现出逼真的3D立体效果。书本中的文字和图片也会3D展示,非常酷。

HTML5 3D书本翻页动画的实现示例

HTML代码

<div class="back-cover p3d">
        <div class="page back flip"></div>
        <div class="page front p3d">
            <div class="shadow"></div>
            <div class="dino"></div>
        </div>
    </div>
    <div class="front-cover p3d">
        <div class="page front flip p3d">
            <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nam fermentum nisl quis nulla eleifend dignissim. Curabitur varius lobortis tincidunt. Maecenas gravida, nulla quis luctus imperdiet, ipsum nibh consectetur ante, in sodales massa tortor eget neque. Donec porta ligula massa, id sagittis est. Ut nisl tellus, faucibus nec feugiat ut, laoreet iaculis felis. Suspendisse ultrices mauris vel tellus suscipit commodo. Integer vitae tortor erat. Pellentesque non tempor nisi.</p>
        </div>
        <div class="page back"></div>
    </div>
</div>

CSS代码

.book {
    width: 300px;
    height: 300px;
    margin-top: -150px;
    position: absolute;
    left: 50%;
    top: 50%;
    -webkit-transform: rotateX(60deg);
    -moz-transform: rotateX(60deg);
    -ms-transform: rotateX(60deg);
    -o-transform: rotateX(60deg);
    transform: rotateX(60deg);
    -webkit-user-select: none;
    -moz-user-select: none;
    -ms-user-select: none;
    -o-user-select: none;
    user-select: none;
}
.page {
    width: 300px;
    height: 300px;
    padding: 1em;
    position: absolute;
    left: 0;
    top: 0;
    text-indent: 2em;
}
.front {
    background-color: #d93e2b;
}
.back {
    background-color: #fff;
}
.front-cover {
    cursor: move;
    -webkit-transform-origin: 0 50%;
    -moz-transform-origin: 0 50%;
    -ms-transform-origin: 0 50%;
    -o-transform-origin: 0 50%;
    transform-origin: 0 50%;
    -webkit-transform: rotateY(0deg);
    -moz-transform: rotateY(0deg);
    -ms-transform: rotateY(0deg);
    -o-transform: rotateY(0deg);
    transform: rotateY(0deg);
}
.front-cover .back {
    background-image: url(mdn.png);
    background-repeat: no-repeat;
    background-position: 50% 50%;
    -webkit-transform: translateZ(3px);
    -moz-transform: translateZ(3px);
    -ms-transform: translateZ(3px);
    -o-transform: translateZ(3px);
    transform: translateZ(3px);
}
.back-cover .back {
    -webkit-transform: translateZ(-3px);
    -moz-transform: translateZ(-3px);
    -ms-transform: translateZ(-3px);
    -o-transform: translateZ(-3px);
    transform: translateZ(-3px); 
}
.p3d {
    -webkit-transform-style: preserve-3d;
    -moz-transform-style: preserve-3d;
    -ms-transform-style: preserve-3d;
    -o-transform-style: preserve-3d;
    transform-style: preserve-3d;
}
.flip {
    -webkit-transform: rotateY(180deg);
    -moz-transform: rotateY(180deg);
    -ms-transform: rotateY(180deg);
    -o-transform: rotateY(180deg);
    transform: rotateY(180deg);
}
.dino,
.shadow {
    width: 196px;
    height: 132px;
    position: absolute;
    left: 60px;
    top: 60px;
    -webkit-transform-origin: 0 100%;
    -moz-transform-origin: 0 100%;
    -ms-transform-origin: 0 100%;
    -o-transform-origin: 0 100%;
    transform-origin: 0 100%;
}
.dino {
    background: url(dino.png) no-repeat;

}
.shadow {
    background: url(shadow.png) no-repeat;
}

JavaScript代码

(function (window, document) {

    var prefixes = ['Webkit', 'Moz', 'ms', 'O', ''],
        book = document.querySelectorAll('.book')[0],
        page = document.querySelectorAll('.front-cover')[0],
        dino = document.querySelectorAll('.dino')[0],
        shadow = document.querySelectorAll('.shadow')[0],
        hold = false,
        centerPoint = window.innerWidth / 2,
        pageSize = 300,
        clamp = function (val, min, max) {
            return Math.max(min, Math.min(val, max));
        };

    page.onmousedown = function () {
        hold = true;
    };

    window.onmouseup = function () {
        if (hold) {
            hold = false;
        }
    };

    window.onresize = function () {
        centerPoint = window.innerWidth / 2;
    };

    window.onmousemove = function (evt) {
        if (!hold) {
            return;
        }

        var angle = clamp((centerPoint - evt.pageX + pageSize) / pageSize * -90, -180, 0),
            i, j;

        for (i = 0, j = prefixes.length; i < j; i++) {
            book.style[prefixes[i] + 'Transform'] = 'rotateX(' + (60 + angle / 8) + 'deg)';
            page.style[prefixes[i] + 'Transform'] = 'rotateY(' + angle + 'deg)';
            dino.style[prefixes[i] + 'Transform'] = 'rotateX(' + (angle / 2) + 'deg)';
            shadow.style[prefixes[i] + 'Transform'] = 'translateZ(1px) skewX(' + (angle / 8) + 'deg)';
        }
    };

})(window, document);

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

HTML / CSS 相关文章推荐
css3使网页、图片变成灰色兼容大多数浏览器
Jul 02 HTML / CSS
详解CSS3浏览器兼容
Dec 14 HTML / CSS
HTML+CSS3模拟心的跳动实例代码
Sep 05 HTML / CSS
html5仿支付宝密码框的实现代码
Sep 06 HTML / CSS
基于HTML5 FileSystem API的使用介绍
Apr 24 HTML / CSS
阻止移动设备(手机、pad)浏览器双击放大网页的方法
Jun 03 HTML / CSS
HTML5实现获取地理位置信息并定位功能
Apr 25 HTML / CSS
html5是什么_动力节点Java学院整理
Jul 07 HTML / CSS
HTML5拖放API实现自动生成相框功能
Apr 07 HTML / CSS
HTML5中的网络存储实现方式
Apr 28 HTML / CSS
纯html+css实现打字效果
Aug 02 HTML / CSS
HTTP中的Content-type详解
Jan 18 HTML / CSS
详解canvas绘制网络字体几种方法
Aug 27 #HTML / CSS
前端实现打印图像功能
Aug 27 #HTML / CSS
html5 canvas绘制网络字体的常用方法
Aug 26 #HTML / CSS
HTML5超炫酷粒子效果的进度条的实现示例
Aug 23 #HTML / CSS
HTML5语义化元素你真的用对了吗
Aug 22 #HTML / CSS
解决HTML5中滚动到底部的事件问题
Aug 22 #HTML / CSS
手摸手教你用canvas实现给图片添加平铺水印的实现
Aug 20 #HTML / CSS
You might like
smarty模板数学运算示例
2016/12/11 PHP
PHP学习记录之数组函数
2018/06/01 PHP
tp5框架前台无限极导航菜单类实现方法分析
2020/03/29 PHP
PHP数组array类常见操作示例
2020/05/15 PHP
PHP如何使用cURL实现Get和Post请求
2020/07/11 PHP
不要小看注释掉的JS 引起的安全问题
2008/12/27 Javascript
jQuery 学习6 操纵元素显示效果的函数
2010/02/07 Javascript
轻轻松松学JS调试(不下载任何工具)
2010/04/14 Javascript
IE之动态添加DOM节点触发window.resize事件
2010/07/27 Javascript
自己用jQuery写了一个图片的马赛克消失效果
2014/05/04 Javascript
让JavaScript的Alert弹出框失效的方法禁止弹出警告框
2014/09/03 Javascript
JavaScript函数详解
2015/02/27 Javascript
jQuery解析XML文件同时动态增加js文件的方法
2015/06/01 Javascript
基于jQuery Tipso插件实现消息提示框特效
2016/03/16 Javascript
angular forEach方法遍历源码解读
2017/01/25 Javascript
bootstrap手风琴折叠示例代码分享
2017/05/22 Javascript
angularjs http与后台交互的实现示例
2018/12/21 Javascript
js仿360开机效果
2019/12/26 Javascript
[47:43]Alliance vs KG 2019国际邀请赛小组赛 BO2 第一场 8.16
2019/08/18 DOTA
Python模块学习 filecmp 文件比较
2012/08/27 Python
python中sys.argv参数用法实例分析
2015/05/20 Python
Python的装饰器用法学习笔记
2016/06/24 Python
Python用户推荐系统曼哈顿算法实现完整代码
2017/12/01 Python
python 统计一个列表当中的每一个元素出现了多少次的方法
2018/11/14 Python
Python实现京东秒杀功能代码
2019/05/16 Python
Django model update的多种用法介绍
2020/03/28 Python
python实现简单成绩录入系统
2019/09/19 Python
利用python实现逐步回归
2020/02/24 Python
英国最大的老式糖果店:A Quarter Of
2017/04/08 全球购物
浅谈react路由传参的几种方式
2021/03/23 Javascript
幼儿教师考核制度
2014/01/25 职场文书
美术指导求职信
2014/03/17 职场文书
2015年食品安全工作总结
2015/05/15 职场文书
MySQL 分页查询的优化技巧
2021/05/12 MySQL
深入浅出的讲解:信号调制到底是如何实现的
2022/02/18 无线电
Python sklearn分类决策树方法详解
2022/09/23 Python