turn.js是一个能够实现3d书籍展现效果的jq插件,使用html5和css3来执行效果。能够很好的适应于ios和安卓等触摸设备。css
下面是官网展现的最简单的一个应用实例html
<div id="flipbook"> <div class="hard"> Turn.js </div> <div class="hard"></div> <div> Page 1 </div> <div> Page 2 </div> <div> Page 3 </div> <div> Page 4 </div> <div class="hard"></div> <div class="hard"></div> </div>
$("#flipbook").turn({ width: 400, height: 300, autoCenter: true });
这个构造函数定义了filpbook和zoom在哪里建立,所以这个构造函数只能被调用一次而且不能被省略。flipbook和zoom都有单独的构造函数html5
$("#flipbook").turn([options]);
$("#flipbook").turn({page: 1, acceleration: true, gradients: true});
$("#zoom-viewport").zoom(options);
acceleration:boolean
默认值true使用触摸时设备时值必须为truejquery
autoCenter:boolean
默认值false是否居中ios
direction:string
默认值ltr指定翻页的方向,ltr:从左到右;rtl:从右到左css3
示例web
在options中配置属性数组
$("#flipbook").turn({direction:"rtl"});
在标签中直接设置属性dom
<div id="flipbook" dir="rtl"> <!--Pages--> </div>
在css中设置属性函数
#flipbook { direction:rtl; }
display:string
默认值double设置书籍的显示样式,double显示双面,single显示单面
duration:number
默认值:600设置翻页动画的快慢,设置为0时,不会有翻页动画
gradient:boolean
默认值:true设置动画过渡效果时的阴影效果
height:number
默认值:$("flipbook").height()
设置flipbook的高度
elevation:number
默认值:0设置动画时的高度(elevation)
page:number
默认值:1设置初始化flipbook时的页面数
pages:number
默认值:$("#flipbook").children().length
为书籍添加任意的页数,默认值为当前书籍的页数。若是设置的页数大于当前fliplook中已存在的页面数,会使用addPage方法动态的添加这些页面
turnCorners:string
默认值:bl,br设置翻页时可以使用的页角,像使用page,next,previous等方法时
样式:{left-corner},{right-corner}
可能的值:bl,br
ortl,tr
orbl,tr
示例
//自动翻页 var way = 1; setInterval(function() { //当前页面为第一页,只能向后翻页 if (way==1) { $("#flipbook").turn("next"); //当翻到最后一页时,只能向前翻 if ($("#flipbook").turn("page")== $("#flipbook").turn("pages")) { way = 2; $("#flipbook").turn("options", {turnCorners: "tl,tr"}); } } else { $("#flipbook").turn("previous"); if ($("#flipbook").turn("page")==1) { way = 1; $("#flipbook").turn("options", {turnCorners: "bl,br"}); } } }, 1000);
when:{}
默认值:空对象设置事件监听
$("#flipbook").turn({when: { turning: function(event, page, pageObject) { // Implementation } } });
width:number
默认值:$("#flipbook").width()
设置页面宽度
easeFunction:string
默认值:ease-in-out
定义过渡动画中加速度曲线模式
可选的值有:
- default
- linear
- ease-in
- ease-out
- ease-in-out
- cubic bezier (require points)
duration:number
默认值:600
定义了过渡动画的快慢,设置为0时没有过渡效果
max:number or function
默认值:必须手动设置值
设置缩放因子的最大值,值为缩放时的最大比例系数
示例
- 参数值为number
// This will increase three times the size of the flipbook //缩放的时候系数为3倍 $("#zoom-viewport").zoom({ flipbook: $("#flipbook"), max: 3 });
- 参数值为function
// If we want to make the flipbook 3000 width when zoomed in. //缩放到指定宽度3000 $("#zoom-viewport").zoom({ flipbook: $("#flipbook"), max: function() { return 3000/$('.magazine').width(); } });
flipbook:jquery element
默认值:必须手动设置
指向zoom做用的内容
示例
$("#flipbook").turn(); $("#zoom-viewport").zoom({ flipbook: $("#flipbook"), max: 3 });
when:object
默认值:{}
设置事件监听
示例
$("#zoom-viewport").turn({when: { doubleTap: function(event) { // Implementation } } });
$("#flipbook").turn("propertyName");
当前页面若是有动画效果(翻页的时候)返回true
示例
function isAnimating() { if ($("#flipbook").turn("animating")) { alert('Animating a page!'); } }
返回当前书籍的翻页方向,返回值为ltr或rtl
示例
$("#flipbook").turn("direction");
返回当前书籍的显示方式,返回值为double或single
示例
alert("The current display is: " + $("#flipbook").turn("display"));
是否禁用,禁用返回true
获取当前的页面值
示例
alert("The current page is: "+$("#flipbook").turn("page"));
获取当前书的总页面数
示例
alert("#flipbook has " + $("#flipbook").turn("pages") + " pages");
获取当前书的尺寸,返回值为一个对象,包括两个内容:width和height
示例
var size = $("#flipbook").turn("size"); alert("Width: "+size.width + ", Height:"+size.height);
获取初始化书籍时设置的options
示例
var duration = $("#flipbook").turn("options").duration; alert("The duration of the transition is "+duration);
获取当前的view
示例
var view = $("#flipbook").turn("view").join(" and "); alert("Current view: "+view);
获取flipbook的缩放系数因子。默认值为1,表明当使用尺寸相关方法时flipbook会使用与原始尺寸相同的尺寸(不会改变尺寸)
示例
var zoom = $("#flipbook").turn("zoom"); alert("Current zoom: "+zoom);
返回当前的zoom值
示例
function zoomedIn() { //值为1表明没有进行缩放 if ($("#zoom-viewport").turn("value")==1) alert("No zoom"); //值大于1表明当前有缩放效果 else if ($("#zoom-viewport").turn("value")>1) alert("Zoomed In"); }
方法用于执行诸如翻页或者更改属性状态等操做
语法
$("#flipbook").turn('method name'[, argument1, argument2]);
当方法没有返回值时,能够与另外一个方法链接
$("#flipbook").turn("method1").turn("method2");
向flipbook中添加新的页面
参数 | 数据类型 | 描述 | 默认值 |
---|---|---|---|
element | jquery元素 | 想要添加的dom元素 | $("<div />") |
pageNumber | number | 想要往对应页面添加的页码数 | $("#flipbook").turn("pages")+1 默认添加到最后一页 |
示例 若是要向第十页添加新页面,能够这样
element = $("<div />").html("Loading..."); $("#flipbook").turn("addPage", element, 10);
或者 设置新页面元素的class值为"p10"也能够指明要插入的页面为第十页
element = $("<div />", {"class": "p10"}).html("Loading..."); $("#flipbook").turn("addPage", element);
根据可见的页面数量来决定flipbook的center。这个方法修改
flipbook
的css属性margin-left
以致于将flipbook放置于中心。所以若是须要修改margin-left
,最好须要将flipbook
放置到一个容器div中来方便修改其margin
属性
若是flipbook
的option
的autoCenter
设置为了true
,则不须要使用这个方法
这个方法没有参数
示例
$("#flipbook").turn("center");
使用这个方法时,实际上是为
flipbook
设置了以下css
样式
#flipbook{ transition:margin-left 1s; -webkit-transition:margin-left 1s; -moz-transition:margin-left 1s; -o-transition:margin-left 1s; -ms-transition:margin-left 1s; transition:margin-left 1s; }
消除flipbook。从dom树,内存和事件监听器中删除全部页面
删除flipbook的同时也会自动删除zoom(若是定义了的话) 该方法没有参数
示例
$("#flipbook").turn("destroy");
也能够删除这些页面的容器
#flipbook
,以下
$("#flipbook").turn("destroy").remove();
设置flipbook的翻页方向(ltr,rtl)
参数 | 数据类型 | 描述 | 默认值 |
---|---|---|---|
direction | string | ltr or rtl |
必须手动设定参数 |
示例
$("#flipbook").turn("direction", "rtl");
设置显示方式,一个视图中只显示一页(
single
)或者一个视图中显示两页(double
)
若是使用single
的显示方式,则会给flipbook
添加overflow:hidden
样式
参数 | 数据类型 | 描述 | 默认值 |
---|---|---|---|
displayMode | string | 设置显示方式 | 必须手动设定参数 |
示例
$("#flipbook").turn("display", "single");
禁用或启用效果。若是禁用,则用户不能修改该页面
参数 | 数据类型 | 描述 | 默认值 |
---|---|---|---|
disable | boolean | 禁用或启用效果 | 必须手动设定参数 |
示例
$("#flipbook").turn("disable", true);
若是flipbook中存在相应页面则返回true
参数 | 数据类型 | 描述 | 默认值 |
---|---|---|---|
pageNumber | number | 要查看是否存在页面的页码 | 必须手动设定参数 |
示例
function checkPage(page) { if ($("#flipbook").turn("hasPage", page)) { alert("Page "+page+" is already in the flipbook"); } } // Check if page 1 is in the flipbook checkPage(1);
转向上一页的视图
该方法没有参数
示例
$("#flipbook").turn("previous");
也能够转换两个视图
$("#flipbook").turn("previous").turn("previous");
转向下一页的视图
该方法没有参数
示例
$("#flipbook").turn("next");
也能够转换两个视图
$("#flipbook").turn("next").turn("next");
检测jq选择器中是否建立了turn.js的实例
示例
if (!$("#flipbook").turn("is")) { // Create a new flipbook $("#flipbook").turn(); }
将视图转换到指定的页面
参数 | 数据类型 | 描述 | 默认值 |
---|---|---|---|
page | number | 要跳转到的页面的页码 | 必须手动设定参数 |
示例
// 跳转到第10页 $("#flipbook").turn("page", 10);
设置pages属性值。若是当前的pages值大于设置的pages值,则会移出flipbook中多出去的这一部分页面
参数 | 数据类型 | 描述 | 默认值 |
---|---|---|---|
pages | number | 值为当前flipbook中页面的总数 | 必须手动设定参数 |
示例
$("#flipbook").turn("pages", 5);
$("#flipbook").turn("hasPage", 10); // It’s true. $("#flipbook").turn("pages", 5); // Sets 5 pages $("#flipbook").turn("hasPage", 10); // Returns false
在指定的页面角显示翻起页面的动画效果
参数 | 数据类型 | 描述 | 默认值 |
---|---|---|---|
corner | string | 设置指定的角 | 必须手动设定参数 |
animate | boolean | true | animation |
示例
// Shows a peeling page at the bottom right corner $("#flipbook").turn("peel", "br");
返回包含两个值得数组,第一个数值的含义是==下一个包含在dom树中页面的页码==,第二个数值的含义是在范围中的最后一个页码。这个范围通常知足以下关系:
range[0] <= $("#flipbook").turn("page") <= range[1]
参数 | 数据类型 | 描述 | 默认值 |
---|---|---|---|
pageNumber | number | 在范围内的页码 | $("#flipbook").turn("page") |
示例 为了可以动态的添加页面,可使用range方法
var range = $("#flipbook").turn("range", 10); for (var page = range[0]; page<=range[1]; page++){ if (!$("#flipbook").turn("hasPage", page)) { $("#flipbook").turn("addPage", $("<div />"), page); } }
移除指定页面
参数 | 数据类型 | 描述 | 默认值 |
---|---|---|---|
pageNumber | number | 须要移出的页面 | 必须手动指定值 |
示例
// Delete the page 10 $("#flipbook").turn("removePage", 10);
从新计算全部页面的尺寸和位置
该方法没有参数
示例
$("#flipbook").turn("resize");
设置flipbook的width和height
参数 | 数据类型 | 描述 | 默认值 |
---|---|---|---|
width | number | flipbook的宽 | 必须手动指定值 |
height | number | flipbook的高 | 必须手动指定值 |
示例
// Resize the flipbook to 1000x600 $("#flipbook").turn("size", 1000, 600);
中止当前的过渡动画 该方法没有参数
示例
// 转到第十页而且取消过渡动画 $("#flipbook").turn("page", 10).turn(‘stop’);
得到当前的发行版本信息
示例
$("#flipbook").turn("version"); // Output is 4.0.6
放大或缩小flipbook的尺寸,根据放大系数更改flipbook的宽和高。若是放大系数为1,则保持原尺寸不进行缩放
参数 | 数据类型 | 描述 | 默认值 |
---|---|---|---|
factor | number | 放大或缩小的比例系数 | 必须手动指定值 |
示例
// Reduce the size in half of the flipbook $("#flipbook").turn("zoom", 0.5);
销毁zoom viewport
若是flipbook被其destory方法销毁,那么zoom viewport会自动的销毁
该方法没有参数
示例
$("#zoom-viewport").turn("destroy");
放大flipbook
该方法没有参数
示例
$("#zoom-viewport").turn("zoomIn");
还原flipbook
该方法没有参数
示例
$("#zoom-viewport").turn("zoomOut");
事件能够支持定义在特殊时刻的行为。有两种不一样的方法能够定义
当添加事件监听器时,会须要构造函数在建立flipbook前添加监听器(when),例如
$("#flipbook").turn({when: { turning: function(event, page, pageObject) { // Implementation } } });
jquery提供了一个bind方法来给元素绑定监听器。能够为一个事件使用bind去添加你须要的任意多的监听器,例如
$("#flipbook").bind("turning", function(event, page, pageObject) { // Implementation });
若是option 的 prefix的值为true,那么须要加一个前缀turn,以下
$("#flipbook").bind("turn.turning", function(event, page, pageObject) { // Implementation });
第一个全部监听函数共享的参数是事件对象,容许你操纵扩展和默认的事件,一些时间的后面能够跟随一个动做,例如能够转动页面。所以,能够经过event.preventDefault()来阻止默认操做。在事件函数中,不必再返回false去阻止默认行为
当页面过渡动画结束时触发事件
参数 | 数据类型 | 描述 |
---|---|---|
event | object | 事件对象 |
pageObject | object | 页面对象 |
pageTurned | boolean | 若是转到的是这个页面,返回true |
示例
$("#flipbook").bind("end", function(event, pageObject, turned){ alert("turn.end:" +pageObject.page); });
当前页码为1时触发该事件
参数 | 数据类型 | 描述 |
---|---|---|
event | object | 事件对象 |
示例
$("#flipbook").bind("first", function(event) { alert("You are at the beginning of the flipbook"); });
在当前页码为最后一页的时候触发该事件
参数 | 数据类型 | 描述 |
---|---|---|
event | object | 事件对象 |
示例
$("#flipbook").bind("last", function(event) { alert("You are at the end of the flipbook"); });
在某些处于当前页面范围内的页面被请求时触发该事件
参数 | 数据类型 | 描述 |
---|---|---|
event | object | 事件对象 |
pages | array | 须要被添加页面的页码的数组 |
示例
$("#flipbook").bind("missing", function(event, pages) { for (var i = 0; i < pages.length; i++) { $(this).turn("addPage", $("<div />"), pages[i]); } });
在页面的折叠动画效果开始时触发该动画。换句话说,在显示折叠起来的页面以前触发该动画
参数 | 数据类型 | 描述 |
---|---|---|
event | object | 事件对象 |
pageobject | object | 页面对象 |
corner | string | 页脚类型 |
默认行为 |
---|
显示页脚折叠起来的效果 |
示例 若是你想阻止当使用页脚tl和tr时的动画效果,可使用start时间而且阻止其默认行为
$("#flipbook").bind("start", function(event, pageObject, corner) { if (corner=="tl" || corner=="tr") { event.preventDefault(); } });
当跳转页面以前触发该事件
参数 | 数据类型 | 描述 |
---|---|---|
event | object | 事件对象 |
page | number | 页码 |
view | array | 新的view |
默认行为 |
---|
跳转页面 |
示例
$("#flipbook").bind("turning", function(event, page, view) { alert("Turning the page to: "+page); });
能够阻止页面跳转到第一页
$("#flipbook").bind("turning", function(event, page, view) { if (page==1) { event.preventDefault(); } });
在页面跳转以后触发该事件
参数 | 数据类型 | 描述 |
---|---|---|
event | object | 事件对象 |
page | number | 新的页码 |
view | array | 新的view |
示例
$("#flipbook").bind("turned", function(event, page, view) { alert("Page: "+page); });
当页面的缩放尺寸发生改变的时候触发该事件
参数 | 数据类型 | 描述 |
---|---|---|
event | object | 事件对象 |
newZoomValue | number | 新的缩放比例系数 |
currentZoomvalue | number | 当前的缩放比例系数 |
默认行为 |
---|
更改缩放比例系数 |
示例
$("#flipbook").bind("zooming", function(event, newZoomValue, currentZoomValue) { alert("New zoom: "+currentZoomValue); });
当双击或双点视图元素时触发该事件
参数 | 数据类型 | 描述 |
---|---|---|
event | object | 事件对象 |
示例
$("#zoom-view").bind("zoom.doubleTap", function(event) { if ($(this).zoom("value")==1) { $(this).zoom("zoomIn", event); } else { $(this).zoom("zoomOut"); } });