基于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 相关文章推荐
jquery 多级下拉菜单核心代码
May 21 Javascript
深入理解javascript中return的作用
Dec 30 Javascript
JavaScript基本语法讲解
Jun 03 Javascript
JS访问SWF的函数用法实例
Jul 01 Javascript
JS实现的在线调色板实例(附demo源码下载)
Mar 01 Javascript
BootStrap智能表单demo示例详解
Jun 13 Javascript
微信小程序购物商城系统开发系列-目录结构介绍
Nov 21 Javascript
jQuery插件开发发送短信倒计时功能代码
May 09 jQuery
bootstrap select下拉搜索插件使用方法详解
Nov 23 Javascript
vue移动端的左右滑动事件详解
Jun 17 Javascript
Jquery如何使用animation动画效果改变背景色的代码
Jul 20 jQuery
Vue+penlayers实现多边形绘制及展示
Dec 24 Vue.js
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
php读取30天之内的根据算法排序的代码
2008/04/06 PHP
Php Mssql操作简单封装支持存储过程
2009/12/11 PHP
利用Memcached在php下实现session机制 替换PHP的原生session支持
2010/08/21 PHP
php中使用array_filter()函数过滤空数组的实现代码
2014/08/19 PHP
PHP实现随机生成水印图片功能
2017/03/22 PHP
PHP 实现页面静态化的几种方法
2017/07/23 PHP
Jquery阻止事件冒泡 event.stopPropagation
2011/12/11 Javascript
判断客户浏览器是否支持cookie的示例代码
2013/12/23 Javascript
js生成缩略图后上传并利用canvas重绘
2014/05/15 Javascript
JavaScript中检查对象property的存在性方法介绍
2014/12/30 Javascript
浅析node连接数据库(express+mysql)
2015/11/30 Javascript
你所未知的3种Node.js代码优化方式
2016/02/25 Javascript
通过正则表达式获取url中参数的简单实现
2016/06/07 Javascript
Bootstrap框架的学习教程详解(二)
2016/10/18 Javascript
vue高德地图之玩转周边
2017/06/16 Javascript
使用store来优化React组件的方法
2017/10/23 Javascript
基于ts的动态接口数据配置的详解
2019/12/18 Javascript
vue项目中使用vue-layer弹框插件的方法
2020/03/11 Javascript
微信小程序点击生成朋友圈分享图(遇到的坑)
2020/06/17 Javascript
微信小程序整个页面的自动适应布局的实现
2020/07/12 Javascript
JS+CSS实现动态时钟
2021/02/19 Javascript
[01:45]典藏宝瓶2+祈求者身心——这就是DOTA2TI9总奖金突破3000万美元的秘密
2019/07/21 DOTA
使用Python来编写HTTP服务器的超级指南
2016/02/18 Python
Python利用递归实现文件的复制方法
2018/10/27 Python
python之mock模块基本使用方法详解
2019/06/27 Python
python中web框架的自定义创建
2019/09/08 Python
Python tcp传输代码实例解析
2020/03/18 Python
Python偏函数Partial function使用方法实例详解
2020/06/17 Python
快时尚眼镜品牌,全国连锁眼镜店:LOHO眼镜生活
2018/10/08 全球购物
Python中如何定义一个函数
2016/09/06 面试题
总经理秘书岗位职责
2014/03/17 职场文书
见习期自我鉴定范文
2014/03/19 职场文书
派出所班子党的群众路线对照检查材料思想汇报
2014/10/01 职场文书
2014年出纳工作总结与计划
2014/12/09 职场文书
警示教育观后感
2015/06/17 职场文书
《检阅》教学反思
2016/02/22 职场文书