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://d3bxy9euw4e147.cloudfront.net/oscms-prodcms/media/documents/Physics-WEB_Sab7RrQ.pdf';


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)
container.parentElement.addEventListener('wheel', zoomWithWheel)


function disable_scroll(){}

function enable_scroll(){}
#the-canvas {
  direction: ltr;
  transform-origin: top left;
}
#div-container {
  width: 400px;
  height: 400px;
}
<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>

<button onclick="disable_scroll()">Disable Scroll Zoom</button>
<button onclick="enable_scroll()">Enable Scroll Zoom</button>


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

上面是一个工作代码的HTML与Scroll Zoom Functionality使用的Wheel of Your Mouse,我可以知道如何启用和enable or disable the scroll of the mouse,以便PDF可以zoom 启用和禁用zoom ?

我试着调到remove the event listener to disable it,但不幸的是,它不起作用.我将非常感谢我能得到的任何帮助:)

button.removeEventListener(“click”, myFunction);

推荐答案

要执行所需的操作,可以使用单个按钮来切换wheel事件与zoomWithWheel函数的绑定,如下所示.请注意,使用data属性来维护zoom 切换的状态.

document.querySelector('#scroll-toggle').addEventListener('click', e => {
  const enabled = e.target.dataset.enabled == 'true'; // as dataset returns a string
  e.target.textContent = enabled ? 'Enable scroll zoom' : 'Disable scroll zoom';
  container.parentElement[enabled ? 'removeEventListener' : 'addEventListener']('wheel', zoomWithWheel)
  e.target.dataset.enabled = !enabled;
});

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

let url = 'https://d3bxy9euw4e147.cloudfront.net/oscms-prodcms/media/documents/Physics-WEB_Sab7RrQ.pdf';
let wheelTimeoutHandler = null;
let 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);
});

const panzoom = Panzoom(container);

document.querySelector('#scroll-toggle').addEventListener('click', e => {
  const enabled = e.target.dataset.enabled == 'true'; // as dataset returns a string
  e.target.textContent = enabled ? 'Enable scroll zoom' : 'Disable scroll zoom';
  container.parentElement[enabled ? 'removeEventListener' : 'addEventListener']('wheel', zoomWithWheel)
  e.target.dataset.enabled = !enabled;
});
#the-canvas {
  direction: ltr;
  transform-origin: top left;
}

#div-container {
  width: 400px;
  height: 400px;
}
<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>

<button id="scroll-toggle" data-enabled="false">Enable Scroll Zoom</button>


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

Javascript相关问答推荐

如何在Node.js中减go 两个日期和时间?

详细更改参考价值:"

为什么在react js中没有调用加载器函数?

ReactJS中的material UI自动完成类别

如何分配类型脚本中具有不同/额外参数的函数类型

Google Apps脚本中的discord邀请API响应的日期解析问题

yarn安装一个本地npm包,以便本地包使用main项目的node_modules(ckeditor-duplicated-modules错误)

Exceljs:我们在file.xlsx(...)&#中发现了一个问题'"" 39人;

Next.js(react)使用moment或不使用日期和时间格式

Ember.js 5.4更新会话存储时如何更新组件变量

类构造函数不能在没有用With Router包装的情况下调用

使用auth.js保护API路由的Next.JS,FETCH()不起作用

向数组中的对象添加键而不改变原始变量

如何限制显示在分页中的可见页面的数量

如何使用<;Link>;执行与JS Reaction中的";window.Location=/GameOverDied;";类似的操作?

使用jQuery find()获取元素的属性

自动滚动功能在当前图像左侧显示上一张图像的一部分

Reaction即使在重新呈现后也会在方法内部保留局部值

为什么我看到的是回复,而不是我的文档?

如何让SVG图标在被点击和访问后改变 colored颜色 ,并在被访问后取消点击时恢复到原来的 colored颜色 ?