Merge pull request #2060 from kkujala/master
Add firefox mouse scrolling support in fullscreen mode.
This commit is contained in:
		
						commit
						b465fc46fa
					
				| @ -629,6 +629,8 @@ var PDFView = { | |||||||
|   isFullscreen: false, |   isFullscreen: false, | ||||||
|   previousScale: null, |   previousScale: null, | ||||||
|   pageRotation: 0, |   pageRotation: 0, | ||||||
|  |   mouseScrollTimeStamp: 0, | ||||||
|  |   mouseScrollDelta: 0, | ||||||
|   lastScroll: 0, |   lastScroll: 0, | ||||||
| 
 | 
 | ||||||
|   // called once when the document is loaded
 |   // called once when the document is loaded
 | ||||||
| @ -1507,6 +1509,7 @@ var PDFView = { | |||||||
|     this.isFullscreen = false; |     this.isFullscreen = false; | ||||||
|     this.parseScale(this.previousScale); |     this.parseScale(this.previousScale); | ||||||
|     this.page = this.page; |     this.page = this.page; | ||||||
|  |     this.clearMouseScrollState(); | ||||||
|   }, |   }, | ||||||
| 
 | 
 | ||||||
|   rotatePages: function pdfViewPageRotation(delta) { |   rotatePages: function pdfViewPageRotation(delta) { | ||||||
| @ -1533,6 +1536,71 @@ var PDFView = { | |||||||
|     setTimeout(function() { |     setTimeout(function() { | ||||||
|       currentPage.scrollIntoView(); |       currentPage.scrollIntoView(); | ||||||
|     }, 0); |     }, 0); | ||||||
|  |   }, | ||||||
|  | 
 | ||||||
|  |   /** | ||||||
|  |    * This function flips the page in presentation mode if the user scrolls up | ||||||
|  |    * or down with large enough motion and prevents page flipping too often. | ||||||
|  |    * | ||||||
|  |    * @this {PDFView} | ||||||
|  |    * @param {number} mouseScrollDelta The delta value from the mouse event. | ||||||
|  |    */ | ||||||
|  |   mouseScroll: function pdfViewMouseScroll(mouseScrollDelta) { | ||||||
|  |     var MOUSE_SCROLL_COOLDOWN_TIME = 50; | ||||||
|  | 
 | ||||||
|  |     var currentTime = (new Date()).getTime(); | ||||||
|  |     var storedTime = this.mouseScrollTimeStamp; | ||||||
|  | 
 | ||||||
|  |     // In case one page has already been flipped there is a cooldown time
 | ||||||
|  |     // which has to expire before next page can be scrolled on to.
 | ||||||
|  |     if (currentTime > storedTime && | ||||||
|  |         currentTime - storedTime < MOUSE_SCROLL_COOLDOWN_TIME) | ||||||
|  |       return; | ||||||
|  | 
 | ||||||
|  |     // In case the user decides to scroll to the opposite direction than before
 | ||||||
|  |     // clear the accumulated delta.
 | ||||||
|  |     if ((this.mouseScrollDelta > 0 && mouseScrollDelta < 0) || | ||||||
|  |         (this.mouseScrollDelta < 0 && mouseScrollDelta > 0)) | ||||||
|  |       this.clearMouseScrollState(); | ||||||
|  | 
 | ||||||
|  |     this.mouseScrollDelta += mouseScrollDelta; | ||||||
|  | 
 | ||||||
|  |     var PAGE_FLIP_THRESHOLD = 120; | ||||||
|  |     if (Math.abs(this.mouseScrollDelta) >= PAGE_FLIP_THRESHOLD) { | ||||||
|  | 
 | ||||||
|  |       var PageFlipDirection = { | ||||||
|  |         UP: -1, | ||||||
|  |         DOWN: 1 | ||||||
|  |       }; | ||||||
|  | 
 | ||||||
|  |       // In fullscreen mode scroll one page at a time.
 | ||||||
|  |       var pageFlipDirection = (this.mouseScrollDelta > 0) ? | ||||||
|  |                                 PageFlipDirection.UP : | ||||||
|  |                                 PageFlipDirection.DOWN; | ||||||
|  |       this.clearMouseScrollState(); | ||||||
|  |       var currentPage = this.page; | ||||||
|  | 
 | ||||||
|  |       // In case we are already on the first or the last page there is no need
 | ||||||
|  |       // to do anything.
 | ||||||
|  |       if ((currentPage == 1 && pageFlipDirection == PageFlipDirection.UP) || | ||||||
|  |           (currentPage == this.pages.length && | ||||||
|  |            pageFlipDirection == PageFlipDirection.DOWN)) | ||||||
|  |         return; | ||||||
|  | 
 | ||||||
|  |       this.page += pageFlipDirection; | ||||||
|  |       this.mouseScrollTimeStamp = currentTime; | ||||||
|  |     } | ||||||
|  |   }, | ||||||
|  | 
 | ||||||
|  |   /** | ||||||
|  |    * This function clears the member attributes used with mouse scrolling in | ||||||
|  |    * presentation mode. | ||||||
|  |    * | ||||||
|  |    * @this {PDFView} | ||||||
|  |    */ | ||||||
|  |   clearMouseScrollState: function pdfViewClearMouseScrollState() { | ||||||
|  |     this.mouseScrollTimeStamp = 0; | ||||||
|  |     this.mouseScrollDelta = 0; | ||||||
|   } |   } | ||||||
| }; | }; | ||||||
| 
 | 
 | ||||||
| @ -2828,6 +2896,9 @@ window.addEventListener('DOMMouseScroll', function(evt) { | |||||||
|     var direction = (ticks > 0) ? 'zoomOut' : 'zoomIn'; |     var direction = (ticks > 0) ? 'zoomOut' : 'zoomIn'; | ||||||
|     for (var i = 0, length = Math.abs(ticks); i < length; i++) |     for (var i = 0, length = Math.abs(ticks); i < length; i++) | ||||||
|       PDFView[direction](); |       PDFView[direction](); | ||||||
|  |   } else if (PDFView.isFullscreen) { | ||||||
|  |     var FIREFOX_DELTA_FACTOR = -40; | ||||||
|  |     PDFView.mouseScroll(evt.detail * FIREFOX_DELTA_FACTOR); | ||||||
|   } |   } | ||||||
| }, false); | }, false); | ||||||
| 
 | 
 | ||||||
| @ -2936,6 +3007,7 @@ window.addEventListener('keydown', function keydown(evt) { | |||||||
| 
 | 
 | ||||||
|   if (handled) { |   if (handled) { | ||||||
|     evt.preventDefault(); |     evt.preventDefault(); | ||||||
|  |     PDFView.clearMouseScrollState(); | ||||||
|   } |   } | ||||||
| }); | }); | ||||||
| 
 | 
 | ||||||
|  | |||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user