首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何提高turn.js DOM中的页数

如何提高turn.js DOM中的页数
EN

Stack Overflow用户
提问于 2015-10-16 06:46:55
回答 2查看 2.8K关注 0票数 4

Turn.js可以使用非常长的翻页本。也就是说,它可以包含的页数没有限制。这是因为turn.js只保留了DOM中的最后6页,不管这本书有多长。仍然会有对以前加载的内容的引用,但是为了释放内存,可以减少缓存。

我想把前7页保留在DOM中。如何做到这一点?pagesInDOM限制是turn.js中定义的6。

html

代码语言:javascript
复制
<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

代码语言:javascript
复制
 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();
        }
    });
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-09-15 13:42:12

pagesInDOM变量是用turn.js硬编码的,在turn.js扩展jQuery时,我还没有找到传递不同值的方法。我想看到它作为一个选项,当实例化转弯,但项目现在似乎死了。我找到的唯一解决方案是进入文件并手动分配一个不同的值,在您的例子中是pagesInDOM = 7;

尽管如此,在声明的正下方,有这样一条评论,即:

代码语言:javascript
复制
// Number of pages in the DOM, minimum value: 6
pagesInDOM = 6,

我做了一些测试,当这本书有超过4页,这个值低于6,接近范围结束的页面没有加载,当你翻阅这本书时,你会发现空白页。我相信这是因为range函数决定了是否应该在翻转时加载另一个页面。

来自turn.js:

代码语言:javascript
复制
// 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)];
},

简而言之,将pagesInDOM在turn.js中的值更改为7,您应该能够获得您想要的结果。

票数 3
EN

Stack Overflow用户

发布于 2019-04-08 20:21:39

如果要动态设置pagesInDOM,可以传递构造函数。(我不知道为什么这是硬编码在图书馆)

代码语言:javascript
复制
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中,在init函数中添加这一行

代码语言:javascript
复制
turnMethods = {
  init: function(options) {
    pagesInDOM = options.pagesInDOM; // retrieve and set the value, 
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/33164120

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档