You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何提升PDFJS LIB实现的PDF鼠标滚轮缩放灵敏度?

如何提高PDF.js结合Panzoom的滚轮缩放灵敏度?

要提升每步滚轮滚动的缩放幅度,核心是调整Panzoom库的滚轮缩放系数。当前代码中Panzoom使用默认的wheelZoomFactor(默认值通常为0.1),该参数决定了单次滚轮滚动对应的缩放比例,调大数值即可提高灵敏度。

修改步骤

在初始化Panzoom的代码中,添加wheelZoomFactor配置项,设置一个大于默认值的数值(示例用0.2,可根据实际需求调整):

// 原初始化代码
// var panzoom = Panzoom(container)

// 修改后的初始化代码
var panzoom = Panzoom(container, {
  wheelZoomFactor: 0.2 // 数值越大,单步滚轮缩放幅度越大
})

完整修改后的代码

HTML

<script src="https://mozilla.github.io/pdf.js/build/pdf.js"></script>
<script src="https://cdn.jsdelivr.net/npm/@panzoom/panzoom@4.3.2/dist/panzoom.min.js"></script>

<div id="div-container">
  <canvas id="the-canvas"></canvas>
</div>

CSS

#the-canvas {
  direction: ltr;
  transform-origin: top left;
}
#div-container {
  width: 400px;
  height: 400px;
}

JavaScript

var pdfjsLib = window['pdfjs-dist/build/pdf'];
pdfjsLib.GlobalWorkerOptions.workerSrc = 'https://mozilla.github.io/pdf.js/build/pdf.worker.js';
var PDFRenderingInProgress = false
var pdfDoc = null
var canvas = document.getElementById('the-canvas')
var ctx = canvas.getContext('2d');
var container = document.getElementById("div-container")

var url = 'https://cdn.filestackcontent.com/mzwDIs6RTbiWZkxscEXL';


var wheelTimeoutHandler = null;
var wheelTimeout = 250 //ms

function renderPage(scale) {
    pdfDoc.getPage(1).then(function(page) {
        var viewport = page.getViewport({scale: scale});
        canvas.height = viewport.height;
        canvas.width = viewport.width;
        var renderContext = {
            canvasContext: ctx,
            viewport: viewport
        };

        if (!PDFRenderingInProgress) {
            PDFRenderingInProgress = true
            var renderTask = page.render(renderContext);
            renderTask.promise.then(function() {
                PDFRenderingInProgress = false
            })
        }
  });
}

function zoomWithWheel(event) {
    panzoom.zoomWithWheel(event)
    clearTimeout(wheelTimeoutHandler);
    wheelTimeoutHandler = setTimeout(function() {
        canvas.style.transform = "scale("+1/panzoom.getScale()+")"
        if (pdfDoc)
            renderPage(panzoom.getScale());
    }, wheelTimeout)
}

pdfjsLib.getDocument(url).promise.then(function(pdfDoc_) {
    pdfDoc = pdfDoc_;
    renderPage(1);
});

// 调整滚轮缩放灵敏度的核心配置
var panzoom = Panzoom(container, {
  wheelZoomFactor: 0.2
})
container.parentElement.addEventListener('wheel', zoomWithWheel)

补充说明

  • wheelZoomFactor无严格取值限制,通常在0.05~0.3区间调整即可,数值越大,单次滚轮滚动触发的缩放幅度越明显。
  • 若仍觉得灵敏度不足,可继续增大该数值(如设置为0.3),直到符合使用需求。

内容的提问来源于stack exchange,提问作者Buzz Su

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.28 01:12:36