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