From 0502e984ad5b7103acb439969d6b1a501b845898 Mon Sep 17 00:00:00 2001 From: Dmitry Lyzo Date: Wed, 23 Oct 2019 22:35:45 +0300 Subject: [PATCH] Fix animated scroll of "smooth scrolled" elements in browsers that support smooth scroll (Chrome/Firefox) --- src/components/scrollManager.js | 32 ++++++++++++++++++++++---------- 1 file changed, 22 insertions(+), 10 deletions(-) diff --git a/src/components/scrollManager.js b/src/components/scrollManager.js index 1aa2b7d62d..5f446a0620 100644 --- a/src/components/scrollManager.js +++ b/src/components/scrollManager.js @@ -199,6 +199,26 @@ define(["dom", "browser", "layoutManager"], function (dom, browser, layoutManage } } + /** + * Performs built-in scroll. + * + * @param {HTMLElement} xScroller horizontal scroller + * @param {number} scrollX horizontal coordinate + * @param {HTMLElement} yScroller vertical scroller + * @param {number} scrollY vertical coordinate + * @param {boolean} smooth smooth scrolling + */ + function builtinScroll(xScroller, scrollX, yScroller, scrollY, smooth) { + var scrollBehavior = smooth ? "smooth" : "instant"; + + if (xScroller !== yScroller) { + scrollToHelper(xScroller, {left: scrollX, behavior: scrollBehavior}); + scrollToHelper(yScroller, {top: scrollY, behavior: scrollBehavior}); + } else { + scrollToHelper(xScroller, {left: scrollX, top: scrollY, behavior: scrollBehavior}); + } + } + var scrollTimer; /** @@ -238,8 +258,7 @@ define(["dom", "browser", "layoutManager"], function (dom, browser, layoutManage dx = Math.round(dx*k); dy = Math.round(dy*k); - xScroller.scrollLeft += dx; - yScroller.scrollTop += dy; + builtinScroll(xScroller, xScroller.scrollLeft + dx, yScroller, yScroller.scrollTop + dy, false); scrollTimer = requestAnimationFrame(scrollAnim); }; @@ -263,14 +282,7 @@ define(["dom", "browser", "layoutManager"], function (dom, browser, layoutManage if (smooth && useAnimatedScroll()) { animateScroll(xScroller, scrollX, yScroller, scrollY); } else { - var scrollBehavior = smooth ? "smooth" : "instant"; - - if (xScroller !== yScroller) { - scrollToHelper(xScroller, {left: scrollX, behavior: scrollBehavior}); - scrollToHelper(yScroller, {top: scrollY, behavior: scrollBehavior}); - } else { - scrollToHelper(xScroller, {left: scrollX, top: scrollY, behavior: scrollBehavior}); - } + builtinScroll(xScroller, scrollX, yScroller, scrollY, smooth); } }