【问题标题】:How to realise a mousewheel zoom function with pdf.js?如何用pdf.js实现鼠标滚轮缩放功能?
【发布时间】:2015-03-20 01:05:18
【问题描述】:

pdf.js 似乎是一个强大但糟糕的文档工具。你们中的任何人都知道如何使用它创建缩放功能吗?我尝试了一些东西,但它没有按预期工作。这是一个小提琴:http://jsfiddle.net/oeaLzavn/2/

这是代码:

HTML:

<div>
    <canvas id="the-canvas" style="border:1px solid black"></canvas>
</div>

CSS:

canvas{
    width: 500px;
    /* overflow: scroll; //didn't help */
}

javascript:

//jQuery and pdf.js needed
$(document).ready(function () {

    var url = "http://cdn.mozilla.net/pdfjs/tracemonkey.pdf";

    var pdfDoc = null,
        pageNum = 1,
        scale = 0.8,
        canvas = document.getElementById('the-canvas'),
        ctx = canvas.getContext('2d');

    function renderPage(num, scale) {
        // Using promise to fetch the page
        pdfDoc.getPage(num).then(function (page) {
            var viewport = page.getViewport(scale);
            canvas.height = viewport.height;
            canvas.width = viewport.width;

            // Render PDF page into canvas context
            var renderContext = {
                canvasContext: ctx,
                viewport: viewport
            };
            page.render(renderContext);
        });
    }

    PDFJS.getDocument(url).then(function getPdfHelloWorld(_pdfDoc) {
        pdfDoc = _pdfDoc;
        renderPage(pageNum, scale);
    });

    if (canvas.addEventListener) {
        // IE9, Chrome, Safari, Opera
        canvas.addEventListener("mousewheel", MouseWheelHandler, false);
        // Firefox
        canvas.addEventListener("DOMMouseScroll", MouseWheelHandler, false);
    }
    // IE 6/7/8
    else canvas.attachEvent("onmousewheel", MouseWheelHandler);

    function MouseWheelHandler(e) {
        var e = window.event || e;
        console.log(e);
        var delta = Math.max(-1, Math.min(1, (e.wheelDelta || -e.detail)));
        console.log(delta);
        if (delta == 1) {
            scale = scale + 0.2;
        }
        else {
            scale = scale - 0.2;
        }
        renderPage(pageNum, scale);
    }

}); 

缩放参数是否错误?或者它只是一个CSS的东西?有什么想法吗?

【问题讨论】:

  • 您到底看到了什么问题?页面首次加载时 pdf 是否正确呈现?
  • 首先我对您的评论感到困惑,但后来我检查了 chrome 中的小提琴。甚至没有在那里加载渲染的 pdf ......但是 localhost 脚本可以。但是,如果您使用 firefox 作为小提琴,您会发现问题。渲染的 pdf 加载,但在画布上使用鼠标滚轮时,内容不会变大。相反,来自其他页面的文本将显示在当前页面上。很奇怪。
  • 是的,这也让我感到困惑 :) 原来需要将 pdf.js 外部资源引用从 raw.github.com... 更改为 rawgithub.com...
  • 啊,谢谢,我更新了小提琴并编辑了上面的链接。

标签: javascript pdf zooming pdfjs


【解决方案1】:

您当前将画布的宽度设置为 500 像素,这意味着它的宽度始终为 500 像素。如果您删除 width 属性,它将按预期缩放。

您可以使用overflow:scroll 在父容器上添加宽度和高度属性,以便用户可以在缩放后的画布标签中移动。

.container {
    width: 500px;
    height: 500px;
    overflow: scroll; 
}
canvas{
    min-width: 10px;
    min-height: 10px;
}

JSfiddle fork

【讨论】:

  • 谢谢,但就是这样。它应该保持那个大小,但可以滚动。但是溢出滚动没有效果...
  • 溢出滚动应该在父容器上
  • 谢谢。但它仍然不能正常工作。有时来自其他页面的行在呈现的页面上,或者有时页面内容被反转。但有时它会起作用。这很奇怪。也许我应该等待更稳定的 pdf.js 版本。无论如何谢谢!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-04-05
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多