Skip to content

Commit

Permalink
improvement on getting original scroll position
Browse files Browse the repository at this point in the history
  • Loading branch information
KingSora committed Jun 20, 2024
1 parent 140c253 commit 932b30c
Show file tree
Hide file tree
Showing 3 changed files with 28 additions and 5 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,8 @@ import {
wnd,
focusElement,
stopAndPrevent,
getOffsetSize,
getScrollSize,
} from '~/support';
import {
dataAttributeHost,
Expand Down Expand Up @@ -106,6 +108,12 @@ export const createStructureSetupElements = (
createNewDiv,
defaultContentInitialization
);
const elementHasOverflow = (elm: HTMLElement) => {
const offsetSize = getOffsetSize(elm);
const scrollSize = getScrollSize(elm);

return scrollSize.w - offsetSize.w > 0 || scrollSize.h - offsetSize.h > 0;
};
const possibleViewportElement = generateViewportElement(viewportInitialization);
const viewportIsTarget = possibleViewportElement === targetElement;
const viewportIsTargetBody = viewportIsTarget && isBody;
Expand All @@ -124,9 +132,10 @@ export const createStructureSetupElements = (
(elm) => isHTMLElement(elm) && !parent(elm) && elm
);
const elementIsGenerated = (elm: HTMLElement | false) => elm && inArray(generatedElements, elm);
const originalNonBodyScrollOffsetElement = elementIsGenerated(viewportElement)
? targetElement
: viewportElement;
const originalNonBodyScrollOffsetElement =
!elementIsGenerated(viewportElement) && elementHasOverflow(viewportElement)
? viewportElement
: targetElement;

const evaluatedTargetObj: StructureSetupElementsObj = {
_target: targetElement,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -380,7 +380,11 @@ const assertCorrectSetupElements = (
} else {
const resolvedViewport = resolveInitialization([target], viewportInitialization);

if (isHTMLElement(resolvedViewport)) {
if (
isHTMLElement(resolvedViewport) &&
(resolvedViewport.offsetHeight - resolvedViewport.scrollHeight > 0 ||
resolvedViewport.offsetWidth - resolvedViewport.scrollWidth)
) {
expect(_originalScrollOffsetElement).toBe(resolvedViewport);
} else {
expect(_originalScrollOffsetElement).toBe(target);
Expand Down
12 changes: 11 additions & 1 deletion website/components/Html.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -2,10 +2,20 @@
import { useEffect } from 'react';
import { useOverlayScrollbars } from 'overlayscrollbars-react';
import { UAParser } from 'ua-parser-js';
import { ClickScrollPlugin, OverlayScrollbars } from 'overlayscrollbars';
import type { ComponentPropsWithoutRef } from 'react';

OverlayScrollbars.plugin(ClickScrollPlugin);

export const Html = ({ children }: ComponentPropsWithoutRef<'html'>) => {
const [initialize] = useOverlayScrollbars({ defer: true });
const [initialize] = useOverlayScrollbars({
defer: true,
options: {
scrollbars: {
clickScroll: true,
},
},
});

useEffect(() => {
const ua = new UAParser();
Expand Down

0 comments on commit 932b30c

Please sign in to comment.