基於jquery的外掛turn.js學習筆記
簡介
turn.js是一個可以實現3d書籍展示效果的jq外掛,使用html5和css3來執行效果。可以很好的適應於ios和安卓等觸控裝置。
How it works?
下面是官網展示的最簡單的一個應用例項
1.編寫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>
2.編寫js部分
$("#flipbook").turn({
width: 400,
height: 300,
autoCenter: true
});
API參考
建構函式
這個建構函式定義了filpbook和zoom在哪裡建立,因此這個建構函式只能被呼叫一次並且不能被省略。flipbook和zoom都有單獨的建構函式
-
turn的建構函式
語法
$("#flipbook").turn([options]);
事例
$("#flipbook").turn({page: 1, acceleration: true, gradients: true});
-
zoom的建構函式
##### 語法
$("#zoom-viewport").zoom(options);
OPTIONS
Turn Options
-
acceleration:boolean
預設值true使用觸控時裝置時值必須為true
-
autoCenter:boolean
預設值false是否居中
-
direction:string
預設值ltr指定翻頁的方向,ltr:從左到右;rtl:從右到左
示例
在options中配置屬性
$("#flipbook").turn({direction:"rtl"});
在標籤中直接設定屬性
<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()
設定頁面寬度
Zoom Options
-
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
}
}
});
Properties
flipbook的Properties
語法
$("#flipbook").turn("propertyName");
-
animating
當前頁面如果有動畫效果(翻頁的時候)返回true
示例
function isAnimating() {
if ($("#flipbook").turn("animating")) {
alert(`Animating a page!`);
}
}
-
direction
返回當前書籍的翻頁方向,返回值為ltr或rtl
示例
$("#flipbook").turn("direction");
-
display
返回當前書籍的顯示方式,返回值為double或single
示例
alert("The current display is: " + $("#flipbook").turn("display"));
-
disabled
是否禁用,禁用返回true
-
page
獲取當前的頁面值
示例
alert("The current page is: "+$("#flipbook").turn("page"));
-
pages
獲取當前書的總頁面數
示例
alert("#flipbook has " + $("#flipbook").turn("pages") + " pages");
-
pages
獲取當前書的尺寸,返回值為一個物件,包括兩個內容:width和height
示例
var size = $("#flipbook").turn("size");
alert("Width: "+size.width + ", Height:"+size.height);
-
options
獲取初始化書籍時設定的options
示例
var duration = $("#flipbook").turn("options").duration;
alert("The duration of the transition is "+duration);
-
view
獲取當前的view
示例
var view = $("#flipbook").turn("view").join(" and ");
alert("Current view: "+view);
-
zoom
獲取flipbook的縮放係數因子。預設值為1,代表當使用尺寸相關方法時flipbook會使用與原始尺寸相同的尺寸(不會改變尺寸)
示例
var zoom = $("#flipbook").turn("zoom");
alert("Current zoom: "+zoom);
zoom的Properties
-
value
返回當前的zoom值
示例
function zoomedIn() {
//值為1代表沒有進行縮放
if ($("#zoom-viewport").turn("value")==1)
alert("No zoom");
//值大於1代表當前有縮放效果
else if ($("#zoom-viewport").turn("value")>1)
alert("Zoomed In");
}
Methods
Turn Methods
方法用於執行諸如翻頁或者更改屬性狀態等操作
語法
$("#flipbook").turn(`method name`[, argument1, argument2]);
當方法沒有返回值時,可以與另一個方法連線
$("#flipbook").turn("method1").turn("method2");
-
addPage
向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);
-
center
根據可見的頁面數量來決定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;
}
-
destory
消除flipbook。從dom樹,記憶體和事件監聽器中刪除所有頁面
刪除flipbook的同時也會自動刪除zoom(如果定義了的話)
該方法沒有引數
示例
$("#flipbook").turn("destroy");
也可以刪除這些頁面的容器
#flipbook
,如下
$("#flipbook").turn("destroy").remove();
-
direction
設定flipbook的翻頁方向(ltr,rtl)
引數 | 資料型別 | 描述 | 預設值 |
---|---|---|---|
direction | string | ltr or rtl |
必須手動設定引數 |
示例
$("#flipbook").turn("direction", "rtl");
-
display
設定顯示方式,一個檢視中只顯示一頁(
single
)或者一個檢視中顯示兩頁(double
)
如果使用single
的顯示方式,則會給flipbook
新增overflow:hidden
樣式
引數 | 資料型別 | 描述 | 預設值 |
---|---|---|---|
displayMode | string | 設定顯示方式 | 必須手動設定引數 |
示例
$("#flipbook").turn("display", "single");
-
disable
禁用或啟用效果。如果禁用,則使用者不能修改該頁面
引數 | 資料型別 | 描述 | 預設值 |
---|---|---|---|
disable | boolean | 禁用或啟用效果 | 必須手動設定引數 |
示例
$("#flipbook").turn("disable", true);
-
hasPage
如果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);
-
previous
轉向上一頁的檢視
該方法沒有引數
示例
$("#flipbook").turn("previous");
也可以轉換兩個檢視
$("#flipbook").turn("previous").turn("previous");
-
next
轉向下一頁的檢視
該方法沒有引數
示例
$("#flipbook").turn("next");
也可以轉換兩個檢視
$("#flipbook").turn("next").turn("next");
-
is
檢測jq選擇器中是否建立了turn.js的例項
示例
if (!$("#flipbook").turn("is")) {
// Create a new flipbook
$("#flipbook").turn();
}
-
page
將檢視轉換到指定的頁面
引數 | 資料型別 | 描述 | 預設值 |
---|---|---|---|
page | number | 要跳轉到的頁面的頁碼 | 必須手動設定引數 |
示例
// 跳轉到第10頁
$("#flipbook").turn("page", 10);
-
pages
設定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
-
peel
在指定的頁面角顯示翻起頁面的動畫效果
引數 | 資料型別 | 描述 | 預設值 |
---|---|---|---|
corner | string | 設定指定的角 | 必須手動設定引數 |
animate | boolean | true | animation |
示例
// Shows a peeling page at the bottom right corner
$("#flipbook").turn("peel", "br");
-
range
返回包含兩個值得陣列,第一個數值的含義是==下一個包含在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);
}
}
-
removePage
移除指定頁面
引數 | 資料型別 | 描述 | 預設值 |
---|---|---|---|
pageNumber | number | 需要移出的頁面 | 必須手動指定值 |
示例
// Delete the page 10
$("#flipbook").turn("removePage", 10);
-
resize
重新計算所有頁面的尺寸和位置
該方法沒有引數
示例
$("#flipbook").turn("resize");
-
size
設定flipbook的width和height
引數 | 資料型別 | 描述 | 預設值 |
---|---|---|---|
width | number | flipbook的寬 | 必須手動指定值 |
height | number | flipbook的高 | 必須手動指定值 |
示例
// Resize the flipbook to 1000x600
$("#flipbook").turn("size", 1000, 600);
-
stop
停止當前的過渡動畫
該方法沒有引數
示例
// 轉到第十頁並且取消過渡動畫
$("#flipbook").turn("page", 10).turn(‘stop’);
-
version
獲得當前的發行版本資訊
示例
$("#flipbook").turn("version");
// Output is 4.0.6
-
zoom
放大或縮小flipbook的尺寸,根據放大係數更改flipbook的寬和高。如果放大係數為1,則保持原尺寸不進行縮放
引數 | 資料型別 | 描述 | 預設值 |
---|---|---|---|
factor | number | 放大或縮小的比例係數 | 必須手動指定值 |
示例
// Reduce the size in half of the flipbook
$("#flipbook").turn("zoom", 0.5);
Zoom Methods
-
destory
銷燬zoom viewport
如果flipbook被其destory方法銷燬,那麼zoom viewport會自動的銷燬
該方法沒有引數
示例
$("#zoom-viewport").turn("destroy");
-
zoomIn
放大flipbook
該方法沒有引數
示例
$("#zoom-viewport").turn("zoomIn");
-
zoomOut
還原flipbook
該方法沒有引數
示例
$("#zoom-viewport").turn("zoomOut");
Events
Turn Events
事件可以支援定義在特殊時刻的行為。有兩種不同的方法可以定義
1.在options中使用
當新增事件監聽器時,會需要建構函式在建立flipbook前新增監聽器(when),例如
$("#flipbook").turn({when: {
turning: function(event, page, pageObject) {
// Implementation
}
}
});
2. 用bind方法
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去阻止預設行為
事件
-
end
當頁面過渡動畫結束時觸發事件
引數 | 資料型別 | 描述 |
---|---|---|
event | object | 事件物件 |
pageObject | object | 頁面物件 |
pageTurned | boolean | 如果轉到的是這個頁面,返回true |
示例
$("#flipbook").bind("end", function(event, pageObject, turned){
alert("turn.end:" +pageObject.page);
});
-
first
當前頁碼為1時觸發該事件
引數 | 資料型別 | 描述 |
---|---|---|
event | object | 事件物件 |
示例
$("#flipbook").bind("first", function(event) {
alert("You are at the beginning of the flipbook");
});
-
last
在當前頁碼為最後一頁的時候觸發該事件
引數 | 資料型別 | 描述 |
---|---|---|
event | object | 事件物件 |
示例
$("#flipbook").bind("last", function(event) {
alert("You are at the end of the flipbook");
});
-
missing
在某些處於當前頁面範圍內的頁面被請求時觸發該事件
引數 | 資料型別 | 描述 |
---|---|---|
event | object | 事件物件 |
pages | array | 需要被新增頁面的頁碼的陣列 |
示例
$("#flipbook").bind("missing", function(event, pages) {
for (var i = 0; i < pages.length; i++) {
$(this).turn("addPage", $("<div />"), pages[i]);
}
});
-
start
在頁面的摺疊動畫效果開始時觸發該動畫。換句話說,在顯示摺疊起來的頁面之前觸發該動畫
引數 | 資料型別 | 描述 |
---|---|---|
event | object | 事件物件 |
pageobject | object | 頁面物件 |
corner | string | 頁尾型別 |
預設行為 |
—|
顯示頁尾摺疊起來的效果 |
示例 如果你想阻止當使用頁尾tl和tr時的動畫效果,可以使用start時間並且阻止其預設行為
$("#flipbook").bind("start", function(event, pageObject, corner) {
if (corner=="tl" || corner=="tr") {
event.preventDefault();
}
});
-
turning
當跳轉頁面之前觸發該事件
引數 | 資料型別 | 描述 |
---|---|---|
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();
}
});
-
turned
在頁面跳轉之後觸發該事件
引數 | 資料型別 | 描述 |
---|---|---|
event | object | 事件物件 |
page | number | 新的頁碼 |
view | array | 新的view |
示例
$("#flipbook").bind("turned", function(event, page, view) {
alert("Page: "+page);
});
-
zooming
當頁面的縮放尺寸發生改變的時候觸發該事件
引數 | 資料型別 | 描述 |
---|---|---|
event | object | 事件物件 |
newZoomValue | number | 新的縮放比例係數 |
currentZoomvalue | number | 當前的縮放比例係數 |
預設行為 |
—|
更改縮放比例係數 |
示例
$("#flipbook").bind("zooming", function(event, newZoomValue, currentZoomValue) {
alert("New zoom: "+currentZoomValue);
});
Zoom Events
-
doubleTap
當雙擊或雙點檢視元素時觸發該事件
引數 | 資料型別 | 描述 |
---|---|---|
event | object | 事件物件 |
示例
$("#zoom-view").bind("zoom.doubleTap", function(event) {
if ($(this).zoom("value")==1) {
$(this).zoom("zoomIn", event);
} else {
$(this).zoom("zoomOut");
}
});