From 33ddbb9e27ad4fdb5302f5570560329ff6d2690a Mon Sep 17 00:00:00 2001 From: Vincent LAURENT Date: Sun, 10 Oct 2021 21:49:34 +0200 Subject: [PATCH] Zoom dans le PDF en mode desktop avec ctrl et la molette ou ctrl + - --- public/js/app.js | 106 +++++++++++++++++++++++++++++++++++------ templates/pdf.html.php | 4 +- 2 files changed, 93 insertions(+), 17 deletions(-) diff --git a/public/js/app.js b/public/js/app.js index ecbb8a7..4e8bc1c 100644 --- a/public/js/app.js +++ b/public/js/app.js @@ -357,6 +357,25 @@ loadingTask.promise.then(function(pdf) { activeCanvas.add(copiedObject).renderAll(); return; } + + if(event.ctrlKey && (event.key == 'à' || event.key == '0')) { + autoZoom(); + event.preventDefault() && event.stopPropagation(); + + return; + } + if(event.ctrlKey && (event.key == '=' || event.key == '+')) { + zoomChange(1); + event.preventDefault() && event.stopPropagation(); + + return; + } + if(event.ctrlKey && event.key == '-') { + zoomChange(-1); + event.preventDefault() && event.stopPropagation(); + + return; + } }); var addSvgInCanvas = function(canvas, item, x, y) { @@ -389,8 +408,10 @@ loadingTask.promise.then(function(pdf) { }); } var resizeTimeout; + var currentScale = 1.5; var windowWidth = window.innerWidth; window.addEventListener('resize', function(event) { + event.preventDefault() && event.stopPropagation(); if(windowWidth == window.innerWidth) { return; } @@ -404,24 +425,77 @@ loadingTask.promise.then(function(pdf) { } menu.classList.remove('d-md-block'); menu.classList.remove('d-none'); - clearTimeout(resizeTimeout); - resizeTimeout = setTimeout(resizePDF, 250); + + autoZoom(); }); - var resizePDF = function () { + document.addEventListener('wheel', function(event) { + if(!event.ctrlKey) { + return; + } + event.preventDefault() && event.stopPropagation(); + + if(event.deltaY > 0) { + zoomChange(-1) + } else { + zoomChange(1) + } + }, { passive: false }); + + var autoZoom = function() { + clearTimeout(resizeTimeout); + resizeTimeout = setTimeout(resizePDF, 100); + } + + var zoomChange = function (inOrOut) { + if(resizeTimeout) { + return; + } + + var deltaScale = 0.2 * inOrOut; + + if(currentScale + deltaScale < 0) { + return + } + if(currentScale + deltaScale > 3) { + return + } + + clearTimeout(resizeTimeout); + currentScale += deltaScale; + + console.log(currentScale); + + resizeTimeout = setTimeout(resizePDF(currentScale), 50); + } + + var resizePDF = function (scale = 'auto') { + renderComplete = true; + pdfRenderTasks.forEach(function(renderTask) { + if(!renderTask) { + renderComplete = false; + } + }); + + if(!renderComplete) { + clearTimeout(resizeTimeout); + resizeTimeout = setTimeout(function(){ resizePDF(scale) }, 50); + return; + } + pdfPages.forEach(function(page, pageIndex) { var renderTask = pdfRenderTasks[pageIndex]; - if(!renderTask) { - clearTimeout(resizeTimeout); - resizeTimeout = setTimeout(resizePDF, 250); - return; + + if(scale == 'auto' && page.getViewport({scale: 1.5}).width > document.getElementById('container-pages').clientWidth - 40) { + scale = (document.getElementById('container-pages').clientWidth - 40) / page.getViewport({scale: 1}).width; } - var scale = 1.5; + + if(scale == 'auto') { + scale = 1.5; + } + var viewport = page.getViewport({scale: scale}); - if(viewport.width > document.getElementById('container-pages').clientWidth - 40) { - viewport = page.getViewport({scale: 1}); - scale = (document.getElementById('container-pages').clientWidth - 40) / viewport.width; - viewport = page.getViewport({ scale: scale }); - } + currentScale = scale; + var canvasPDF = document.getElementById('canvas-pdf-' + pageIndex); var context = canvasPDF.getContext('2d'); canvasPDF.height = viewport.height; @@ -442,7 +516,7 @@ loadingTask.promise.then(function(pdf) { canvasEdition.setHeight(canvasEdition.getHeight() * scaleMultiplier); canvasEdition.renderAll(); canvasEdition.calcOffset(); - + var renderContext = { canvasContext: context, viewport: viewport, @@ -453,6 +527,8 @@ loadingTask.promise.then(function(pdf) { renderTask = page.render(renderContext); renderTask.promise.then(function () { pdfRenderTasks[pageIndex] = renderTask; + clearTimeout(resizeTimeout); + resizeTimeout = null; }); }); } @@ -470,7 +546,7 @@ loadingTask.promise.then(function(pdf) { var pageIndex = page.pageNumber - 1; document.getElementById('form_pdf').insertAdjacentHTML('beforeend', ''); - document.getElementById('container-pages').insertAdjacentHTML('beforeend', '
'); + document.getElementById('container-pages').insertAdjacentHTML('beforeend', '
'); var canvasPDF = document.getElementById('canvas-pdf-' + pageIndex); var canvasEditionHTML = document.getElementById('canvas-edition-' + pageIndex); diff --git a/templates/pdf.html.php b/templates/pdf.html.php index 1ebfe3b..e1797d0 100644 --- a/templates/pdf.html.php +++ b/templates/pdf.html.php @@ -27,11 +27,11 @@
-
+
-
+
Signature du PDF