Browse Source

fix: 修复放大缩小渲染bug

liutian 1 year ago
parent
commit
5586fbaa6b
2 changed files with 9 additions and 4 deletions
  1. 2 1
      packages/core/src/pdf_presentation_mode.js
  2. 7 3
      packages/core/src/pdf_viewer.js

+ 2 - 1
packages/core/src/pdf_presentation_mode.js

@@ -208,8 +208,9 @@ class PDFPresentationMode {
       if (this.#args.spreadMode !== null) {
         this.pdfViewer.spreadMode = this.#args.spreadMode;
       }
-      this.pdfViewer.currentScaleValue = this.#args.scaleValue;
+      this.pdfViewer.exitPresentationMode = true
       this.pdfViewer.currentPageNumber = pageNumber;
+      this.pdfViewer.currentScaleValue = this.#args.scaleValue;
 
       if (this.#args.annotationEditorMode !== null) {
         this.pdfViewer.annotationEditorMode = this.#args.annotationEditorMode;

+ 7 - 3
packages/core/src/pdf_viewer.js

@@ -149,6 +149,7 @@ class PDFViewer {
     this.viewer = options.viewer || options.container.firstElementChild;
     this.annotationStore = options.annotationStore
     this.messageHandler = options.messageHandler
+    this.exitPresentationMode = false
     if (this.container?.tagName !== "DIV" || this.viewer?.tagName !== "DIV") {
       throw new Error("Invalid `container` and/or `viewer` option.");
     }
@@ -979,6 +980,7 @@ class PDFViewer {
       this.#scaleTimeoutId = setTimeout(() => {
         this.#scaleTimeoutId = null;
         this.refresh();
+        this.exitPresentationMode = false
       }, drawingDelay);
     }
 
@@ -1343,7 +1345,7 @@ class PDFViewer {
   }
 
   async update() {
-    if (this.#scaleTimeoutId !== null) {
+    if (this.#scaleTimeoutId !== null && (!this.isInPresentationMode && !this.exitPresentationMode)) {
       clearTimeout(this.#scaleTimeoutId);
       this.#scaleTimeoutId = null;
     }
@@ -1519,8 +1521,10 @@ class PDFViewer {
     const renderingTask = []
     for (let i = 0; i < visiblePages.views.length; i++) {
       const pageView = visiblePages.views[i].view
-      if (pageView.renderingState === RenderingStates.FINISHED) {
+      if (pageView.renderingState === RenderingStates.FINISHED && pageView.canvas) {
         continue
+      } else if (pageView.renderingState === RenderingStates.FINISHED) {
+        pageView.reset()
       }
       await this.#ensurePdfPageLoaded(pageView).then(() => {
         renderingTask.push(pageView.draw())
@@ -2007,7 +2011,7 @@ class PDFViewer {
     for (const pageView of this._pages) {
       pageView.update(updateArgs);
     }
-    if (this.#scaleTimeoutId !== null && !this.isInPresentationMode) {
+    if (this.#scaleTimeoutId !== null && (!this.isInPresentationMode && !this.exitPresentationMode)) {
       clearTimeout(this.#scaleTimeoutId);
       this.#scaleTimeoutId = null;
     }