Skip to content

Commit 010d7f9

Browse files
authored
normalize scroll speed (#2443)
normalize scroll speed over different browsers
1 parent 160b735 commit 010d7f9

File tree

1 file changed

+50
-4
lines changed

1 file changed

+50
-4
lines changed

js/activity.js

Lines changed: 50 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1733,16 +1733,62 @@ function Activity() {
17331733
if (docById("numberLabel") != null) docById("numberLabel").style.display = "none";
17341734
}
17351735

1736+
let normalizeWheel = (event) => {
1737+
let PIXEL_STEP = 10;
1738+
let LINE_HEIGHT = 40;
1739+
let PAGE_HEIGHT = 800;
1740+
1741+
let sX = 0, sY = 0, // spinX, spinY
1742+
pX = 0, pY = 0; // pixelX, pixelY
1743+
1744+
if ('detail' in event) sY = event.detail;
1745+
if ('wheelDelta' in event) sY = -event.wheelDelta / 120;
1746+
if ('wheelDeltaY' in event) sY = -event.wheelDeltaY / 120;
1747+
if ('wheelDeltaX' in event) sX = -event.wheelDeltaX / 120;
1748+
1749+
// side scrolling on FF with DOMMouseScroll
1750+
if ( 'axis' in event && event.axis === event.HORIZONTAL_AXIS ) {
1751+
sX = sY;
1752+
sY = 0;
1753+
}
1754+
1755+
pX = sX * PIXEL_STEP;
1756+
pY = sY * PIXEL_STEP;
1757+
1758+
if ('deltaY' in event) pY = event.deltaY;
1759+
if ('deltaX' in event) pX = event.deltaX;
1760+
1761+
if ((pX || pY) && event.deltaMode) {
1762+
if (event.deltaMode == 1) { // ff uses deltamode = 1
1763+
pX *= LINE_HEIGHT;
1764+
pY *= LINE_HEIGHT;
1765+
} else { // delta in PAGE units
1766+
pX *= PAGE_HEIGHT;
1767+
pY *= PAGE_HEIGHT;
1768+
}
1769+
}
1770+
1771+
// Fall-back if spin cannot be determined
1772+
if (pX && !sX) sX = (pX < 1) ? -1 : 1;
1773+
if (pY && !sY) sY = (pY < 1) ? -1 : 1;
1774+
1775+
return { pixelX : pX,
1776+
pixelY : pY };
1777+
}
1778+
17361779
let __wheelHandler = function(event) {
1737-
if (event.deltaY !== 0 && event.axis === event.VERTICAL_AXIS) {
1780+
let data = normalizeWheel(event);// normalize over different browsers
1781+
let delY = data.pixelY;
1782+
let delX = data.pixelX;
1783+
if (delY !== 0 && event.axis === event.VERTICAL_AXIS) {
17381784
closeAnyOpenMenusAndLabels();// closes all wheelnavs when scrolling .
1739-
blocksContainer.y -= event.deltaY;
1785+
blocksContainer.y -= delY;
17401786
}
17411787
// horizontal scroll
17421788
if (scrollBlockContainer) {
1743-
if (event.deltaX !== 0 && event.axis === event.HORIZONTAL_AXIS) {
1789+
if (delX !== 0 && event.axis === event.HORIZONTAL_AXIS) {
17441790
closeAnyOpenMenusAndLabels();
1745-
blocksContainer.x -= event.deltaX;
1791+
blocksContainer.x -= delX;
17461792
}
17471793
} else {
17481794
event.preventDefault();

0 commit comments

Comments
 (0)