基于javascript html5实现3D翻书特效


Posted in Javascript onMarch 14, 2016

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

基于javascript html5实现3D翻书特效

在线演示 源码下载

HTML代码

<div class="book p3d">
 <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);

以上就是HTML5 3D书本翻页动画的示例代码,希望对大家学习javascript程序设计有所帮助。

Javascript 相关文章推荐
javascript Zifa FormValid 0.1表单验证 代码打包下载
Jun 08 Javascript
Iframe thickbox2.0使用的方法
Mar 05 Javascript
js 定时器setTimeout无法调用局部变量的解决办法
Nov 28 Javascript
JS连连看源码完美注释版(推荐)
Dec 09 Javascript
js写的评论分页(还不错)
Dec 23 Javascript
JavaScript数组随机排列实现随机洗牌功能
Mar 19 Javascript
jQuery使用attr()方法同时设置多个属性值用法实例
Mar 26 Javascript
JQuery动态添加Select的Option元素实现方法
Aug 29 Javascript
谈谈target=_new和_blank的不同之处
Oct 25 Javascript
js学习总结之DOM2兼容处理顺序问题的解决方法
Jul 27 Javascript
Node.js使用Koa搭建 基础项目
Jan 08 Javascript
element-ui使用导航栏跳转路由的用法详解
Aug 22 Javascript
php基于redis处理session的方法
Mar 14 #Javascript
使用javascript插入样式
Mar 14 #Javascript
jQuery实现百叶窗焦点图动画效果代码分享(附源码下载)
Mar 14 #Javascript
javascript实现数组去重的多种方法
Mar 14 #Javascript
javascript实现PC网页里的拖拽效果
Mar 14 #Javascript
Jquery实现简单的轮播效果(代码管用)
Mar 14 #Javascript
node模块机制与异步处理详解
Mar 13 #Javascript
You might like
ASP和PHP都是可以删除自身的
2007/04/09 PHP
php实现给一张图片加上水印效果
2016/01/02 PHP
详解配置 Apache 服务器支持 PHP 文件的解析
2017/02/15 PHP
PHP用户注册邮件激活账户的实现代码
2017/05/31 PHP
基于win2003虚拟机中apache服务器的访问
2017/08/01 PHP
Yii2.0使用阿里云OSS的SDK上传图片、下载、删除图片示例
2017/09/20 PHP
IE8 下的Js错误HTML Parsing Error...
2009/08/14 Javascript
jquery 页面全选框实践代码
2010/04/02 Javascript
基本jquery的控制tabs打开的数量的代码
2010/10/17 Javascript
基于jquery实现的省市区级联无ajax
2013/09/24 Javascript
js 异步操作回调函数如何控制执行顺序
2013/12/24 Javascript
Javascript中的Array数组对象详谈
2014/03/03 Javascript
js打开windows上的可执行文件示例
2014/05/27 Javascript
jQuery窗口、文档、网页各种高度的精确理解
2014/07/02 Javascript
javascript获取flash版本号的方法
2014/11/20 Javascript
jQuery幻灯片特效代码分享--鼠标滑过按钮时切换(2)
2020/11/18 Javascript
js和jquery分别验证单选框、复选框、下拉框
2015/12/17 Javascript
详述JavaScript实现继承的几种方式(推荐)
2016/03/22 Javascript
nodeJs爬虫获取数据简单实现代码
2016/03/29 NodeJs
js添加千分位的实现代码(超简单)
2016/08/01 Javascript
BootStrap无限级分类(无限极分类封装版)
2016/08/26 Javascript
什么是JavaScript中的结果值?
2016/10/08 Javascript
BootStrapTable服务器分页实例解析
2016/12/20 Javascript
js 计数排序的实现示例(升级版)
2020/01/12 Javascript
Python 判断 有向图 是否有环的实例讲解
2018/02/01 Python
Python创建普通菜单示例【基于win32ui模块】
2018/05/09 Python
python+opencv+caffe+摄像头做目标检测的实例代码
2018/08/03 Python
详解利用Python scipy.signal.filtfilt() 实现信号滤波
2019/06/05 Python
使用Python opencv实现视频与图片的相互转换
2019/07/08 Python
结构工程个人自荐信范文
2013/11/30 职场文书
幼儿园保育员辞职信
2014/01/12 职场文书
母亲节感恩活动记录
2014/03/16 职场文书
房屋买卖委托书格式范本格式
2014/10/13 职场文书
《小小的船》教学反思
2016/02/18 职场文书
浅析python中特殊文件和特殊函数
2022/02/24 Python
Java后端 Dubbo retries 超时重试机制的解决方案
2022/04/14 Java/Android