From 875eaa0e9f8c98cb57d4d4aa9f2dfdd8989afb6c Mon Sep 17 00:00:00 2001 From: Arsi1989258987 Date: Fri, 25 Jun 2021 22:17:22 +0430 Subject: [PATCH 1/3] feat(scrollBehavior): Add overflowedElementSelector option --- src/util/scroll.js | 19 +++++++++++++++++-- 1 file changed, 17 insertions(+), 2 deletions(-) diff --git a/src/util/scroll.js b/src/util/scroll.js index d1adeb310..a91419835 100644 --- a/src/util/scroll.js +++ b/src/util/scroll.js @@ -134,6 +134,18 @@ function isNumber (v: any): boolean { return typeof v === 'number' } +function getOverflowedElement (overflowedElementSelector: any): any { + if (overflowedElementSelector) { + const overflowedElement = hashStartsWithNumberRE.test(overflowedElementSelector) // $flow-disable-line + ? document.getElementById(overflowedElementSelector.slice(1)) // $flow-disable-line + : document.querySelector(overflowedElementSelector) + + return overflowedElement + } + + return window +} + const hashStartsWithNumberRE = /^#\d/ function scrollToPosition (shouldScroll, position) { @@ -161,15 +173,18 @@ function scrollToPosition (shouldScroll, position) { if (position) { // $flow-disable-line + + const overflowedElement = getOverflowedElement(shouldScroll.overflowedElementSelector) + if ('scrollBehavior' in document.documentElement.style) { - window.scrollTo({ + overflowedElement.scrollTo({ left: position.x, top: position.y, // $flow-disable-line behavior: shouldScroll.behavior }) } else { - window.scrollTo(position.x, position.y) + overflowedElement.scrollTo(position.x, position.y) } } } From 9441f675baf7ec68faa1e1f4b7a7be1bd62f4ab5 Mon Sep 17 00:00:00 2001 From: Ari Davar Date: Sat, 26 Jun 2021 00:27:03 +0430 Subject: [PATCH 2/3] Update scroll.js --- src/util/scroll.js | 20 ++++++++------------ 1 file changed, 8 insertions(+), 12 deletions(-) diff --git a/src/util/scroll.js b/src/util/scroll.js index a91419835..1f282c553 100644 --- a/src/util/scroll.js +++ b/src/util/scroll.js @@ -135,15 +135,9 @@ function isNumber (v: any): boolean { } function getOverflowedElement (overflowedElementSelector: any): any { - if (overflowedElementSelector) { - const overflowedElement = hashStartsWithNumberRE.test(overflowedElementSelector) // $flow-disable-line - ? document.getElementById(overflowedElementSelector.slice(1)) // $flow-disable-line - : document.querySelector(overflowedElementSelector) - - return overflowedElement - } - - return window + return hashStartsWithNumberRE.test(overflowedElementSelector) // $flow-disable-line + ? document.getElementById(overflowedElementSelector.slice(1)) // $flow-disable-line + : document.querySelector(overflowedElementSelector) } const hashStartsWithNumberRE = /^#\d/ @@ -172,10 +166,12 @@ function scrollToPosition (shouldScroll, position) { } if (position) { - // $flow-disable-line - - const overflowedElement = getOverflowedElement(shouldScroll.overflowedElementSelector) + let overflowedElement = window + if (isObject && typeof shouldScroll.overflowedElementSelector === 'string') { + overflowedElement = getOverflowedElement(shouldScroll.overflowedElementSelector) + } + // $flow-disable-line if ('scrollBehavior' in document.documentElement.style) { overflowedElement.scrollTo({ left: position.x, From 03c33f22e70607e51d59db74c920bfc6381a9fab Mon Sep 17 00:00:00 2001 From: Ari Davar Date: Sun, 27 Jun 2021 10:37:09 +0430 Subject: [PATCH 3/3] Change element variable name to container --- src/util/scroll.js | 22 +++++++++++----------- 1 file changed, 11 insertions(+), 11 deletions(-) diff --git a/src/util/scroll.js b/src/util/scroll.js index 1f282c553..307ae8668 100644 --- a/src/util/scroll.js +++ b/src/util/scroll.js @@ -134,14 +134,14 @@ function isNumber (v: any): boolean { return typeof v === 'number' } -function getOverflowedElement (overflowedElementSelector: any): any { - return hashStartsWithNumberRE.test(overflowedElementSelector) // $flow-disable-line - ? document.getElementById(overflowedElementSelector.slice(1)) // $flow-disable-line - : document.querySelector(overflowedElementSelector) -} - const hashStartsWithNumberRE = /^#\d/ +function getContainerElement (containerSelector: any): any { + return hashStartsWithNumberRE.test(containerSelector) // $flow-disable-line + ? document.getElementById(containerSelector.slice(1)) // $flow-disable-line + : document.querySelector(containerSelector) +} + function scrollToPosition (shouldScroll, position) { const isObject = typeof shouldScroll === 'object' if (isObject && typeof shouldScroll.selector === 'string') { @@ -166,21 +166,21 @@ function scrollToPosition (shouldScroll, position) { } if (position) { - let overflowedElement = window - if (isObject && typeof shouldScroll.overflowedElementSelector === 'string') { - overflowedElement = getOverflowedElement(shouldScroll.overflowedElementSelector) + let containerElement = window + if (isObject && typeof shouldScroll.container === 'string') { + containerElement = getContainerElement(shouldScroll.container) } // $flow-disable-line if ('scrollBehavior' in document.documentElement.style) { - overflowedElement.scrollTo({ + containerElement.scrollTo({ left: position.x, top: position.y, // $flow-disable-line behavior: shouldScroll.behavior }) } else { - overflowedElement.scrollTo(position.x, position.y) + containerElement.scrollTo(position.x, position.y) } } }