如何增加 DOM 中的页数,共 turn.js
How to increase the amount of pages in DOM of turn.js
Turn.js 可以处理很长的动画书。也就是说,没有限制
关于它可以包含的页面数量。这是因为
turn.js 只保留 DOM 最后 6 页,无论多长时间
书岛仍然会引用之前的内容
以前加载过,但可以减少缓存以便
释放内存。
我想保留 DOM 中的前 7 页。怎么能做到这一点?
pagesInDOM
限制为 6,如 turn.js 中所定义。
html
<div id=”flipbook”>
<div class=”hard”>Page 1</div>
<div class=”hard”>Page 2</div>
<div class=”hard”>Page 3</div>
<div class=”hard”>Page 4</div>
<div class=”hard”>Page 5</div>
<div class=”hard”>Page 6</div>
<div class=”hard”>Page 7</div>
<div class=”hard”>Page 8</div>
<div class=”hard”>Page 9</div>
<div class=”hard”>Page 10</div>
</div>
js
var oTurn = $('#flipbook').turn({
width: 1700,
height: 850,
elevation: 50,
gradients: false,
autoCenter: true,
acceleration: true,
start: function (event, pageObject, corner) {
if (pageObject.next === 1)
event.preventDefault();
},
turning: function (event, page, view) {
if (page === 1)
event.preventDefault();
}
});
pagesInDOM 变量在 turn.js 中进行了硬编码,我还没有找到一种方法来传递不同的值,因为 turn.js 扩展了 jQuery。我希望在实例化 turn 时看到它作为一个选项可用,但该项目现在似乎已经死了。我找到的唯一解决方案是进入文件并手动为其分配不同的值,在您的情况下 pagesInDOM = 7;
.
就是说,在声明上方的未缩小版本中有一条评论指出:
// Number of pages in the DOM, minimum value: 6
pagesInDOM = 6,
我做了一些测试,当书页数超过 4 页且此值低于 6 时,不会加载接近范围末尾的页面,翻阅本书时您会发现空白页。我相信这是由于范围函数决定了在翻转时是否应该加载另一个页面。
来自turn.js:
// Returns a range of pages that should be in the DOM
// Example:
// - page in the current view, return true
// * page is in the range, return true
// Otherwise, return false
// 1 2-3 4-5 6-7 8-9 10-11 12-13
// ** ** -- ** **
range: function(page) {
var remainingPages, left, right, view,
data = this.data();
page = page || data.tpage || data.page || 1;
view = turnMethods._view.call(this, page);
if (page<1 || page>data.totalPages)
throw turnError('"'+page+'" is not a valid page');
view[1] = view[1] || view[0];
if (view[0]>=1 && view[1]<=data.totalPages) {
remainingPages = Math.floor((pagesInDOM-2)/2);
if (data.totalPages-view[1] > view[0]) {
left = Math.min(view[0]-1, remainingPages);
right = 2*remainingPages-left;
} else {
right = Math.min(data.totalPages-view[1], remainingPages);
left = 2*remainingPages-right;
}
} else {
left = pagesInDOM-1;
right = pagesInDOM-1;
}
return [Math.max(1, view[0]-left),
Math.min(data.totalPages, view[1]+right)];
},
简而言之,将turn.js中pagesInDOM的值改为7,应该可以达到你想要的结果。
如果你想动态设置pagesInDOM
你可以传入构造函数。 (我不知道为什么这在库中被硬编码)
const pagesInDOMDynamic = 8;
$('#flipbook').turn({
width: '300px',
height: '300px',
pagesInDOM: (pagesInDOMDynamic < 6) ? 6 : pagesInDOMDynamic // pass the value to the constructor, If value is less than 6 pass 6 here
});
然后在Turn.js的初始化函数中添加这一行
turnMethods = {
init: function(options) {
pagesInDOM = options.pagesInDOM; // retrieve and set the value,
Turn.js 可以处理很长的动画书。也就是说,没有限制 关于它可以包含的页面数量。这是因为 turn.js 只保留 DOM 最后 6 页,无论多长时间 书岛仍然会引用之前的内容 以前加载过,但可以减少缓存以便 释放内存。
我想保留 DOM 中的前 7 页。怎么能做到这一点?
pagesInDOM
限制为 6,如 turn.js 中所定义。
html
<div id=”flipbook”>
<div class=”hard”>Page 1</div>
<div class=”hard”>Page 2</div>
<div class=”hard”>Page 3</div>
<div class=”hard”>Page 4</div>
<div class=”hard”>Page 5</div>
<div class=”hard”>Page 6</div>
<div class=”hard”>Page 7</div>
<div class=”hard”>Page 8</div>
<div class=”hard”>Page 9</div>
<div class=”hard”>Page 10</div>
</div>
js
var oTurn = $('#flipbook').turn({
width: 1700,
height: 850,
elevation: 50,
gradients: false,
autoCenter: true,
acceleration: true,
start: function (event, pageObject, corner) {
if (pageObject.next === 1)
event.preventDefault();
},
turning: function (event, page, view) {
if (page === 1)
event.preventDefault();
}
});
pagesInDOM 变量在 turn.js 中进行了硬编码,我还没有找到一种方法来传递不同的值,因为 turn.js 扩展了 jQuery。我希望在实例化 turn 时看到它作为一个选项可用,但该项目现在似乎已经死了。我找到的唯一解决方案是进入文件并手动为其分配不同的值,在您的情况下 pagesInDOM = 7;
.
就是说,在声明上方的未缩小版本中有一条评论指出:
// Number of pages in the DOM, minimum value: 6
pagesInDOM = 6,
我做了一些测试,当书页数超过 4 页且此值低于 6 时,不会加载接近范围末尾的页面,翻阅本书时您会发现空白页。我相信这是由于范围函数决定了在翻转时是否应该加载另一个页面。
来自turn.js:
// Returns a range of pages that should be in the DOM
// Example:
// - page in the current view, return true
// * page is in the range, return true
// Otherwise, return false
// 1 2-3 4-5 6-7 8-9 10-11 12-13
// ** ** -- ** **
range: function(page) {
var remainingPages, left, right, view,
data = this.data();
page = page || data.tpage || data.page || 1;
view = turnMethods._view.call(this, page);
if (page<1 || page>data.totalPages)
throw turnError('"'+page+'" is not a valid page');
view[1] = view[1] || view[0];
if (view[0]>=1 && view[1]<=data.totalPages) {
remainingPages = Math.floor((pagesInDOM-2)/2);
if (data.totalPages-view[1] > view[0]) {
left = Math.min(view[0]-1, remainingPages);
right = 2*remainingPages-left;
} else {
right = Math.min(data.totalPages-view[1], remainingPages);
left = 2*remainingPages-right;
}
} else {
left = pagesInDOM-1;
right = pagesInDOM-1;
}
return [Math.max(1, view[0]-left),
Math.min(data.totalPages, view[1]+right)];
},
简而言之,将turn.js中pagesInDOM的值改为7,应该可以达到你想要的结果。
如果你想动态设置pagesInDOM
你可以传入构造函数。 (我不知道为什么这在库中被硬编码)
const pagesInDOMDynamic = 8;
$('#flipbook').turn({
width: '300px',
height: '300px',
pagesInDOM: (pagesInDOMDynamic < 6) ? 6 : pagesInDOMDynamic // pass the value to the constructor, If value is less than 6 pass 6 here
});
然后在Turn.js的初始化函数中添加这一行
turnMethods = {
init: function(options) {
pagesInDOM = options.pagesInDOM; // retrieve and set the value,