mirror of
https://github.com/tenrok/OverlayScrollbars.git
synced 2026-06-21 00:10:37 +03:00
fix arrange bug
This commit is contained in:
@@ -1,21 +1,9 @@
|
|||||||
import {
|
import { rAF, cAF, isFunction, on, runEachAndClear, setT, clearT } from 'support';
|
||||||
rAF,
|
|
||||||
cAF,
|
|
||||||
isFunction,
|
|
||||||
on,
|
|
||||||
runEachAndClear,
|
|
||||||
setT,
|
|
||||||
clearT,
|
|
||||||
parent,
|
|
||||||
scrollLeft,
|
|
||||||
scrollTop,
|
|
||||||
} from 'support';
|
|
||||||
import { createState, createOptionCheck } from 'setups/setups';
|
import { createState, createOptionCheck } from 'setups/setups';
|
||||||
import {
|
import {
|
||||||
createScrollbarsSetupElements,
|
createScrollbarsSetupElements,
|
||||||
ScrollbarsSetupElement,
|
ScrollbarsSetupElement,
|
||||||
ScrollbarsSetupElementsObj,
|
ScrollbarsSetupElementsObj,
|
||||||
ScrollbarStructure,
|
|
||||||
} from 'setups/scrollbarsSetup/scrollbarsSetup.elements';
|
} from 'setups/scrollbarsSetup/scrollbarsSetup.elements';
|
||||||
import {
|
import {
|
||||||
classNamesScrollbarVisible,
|
classNamesScrollbarVisible,
|
||||||
@@ -175,7 +163,7 @@ export const createScrollbarsSetup = (
|
|||||||
target,
|
target,
|
||||||
structureSetupState._elements
|
structureSetupState._elements
|
||||||
);
|
);
|
||||||
const { _host, _viewport, _viewportIsTarget, _isBody } = structureSetupState._elements;
|
const { _host, _viewport } = structureSetupState._elements;
|
||||||
const { _horizontal, _vertical } = elements;
|
const { _horizontal, _vertical } = elements;
|
||||||
const { _addRemoveClass: addRemoveClassHorizontal, _handleStyle: styleHorizontal } = _horizontal;
|
const { _addRemoveClass: addRemoveClassHorizontal, _handleStyle: styleHorizontal } = _horizontal;
|
||||||
const { _addRemoveClass: addRemoveClassVertical, _handleStyle: styleVertical } = _vertical;
|
const { _addRemoveClass: addRemoveClassVertical, _handleStyle: styleVertical } = _vertical;
|
||||||
|
|||||||
@@ -20,6 +20,8 @@ import {
|
|||||||
closest,
|
closest,
|
||||||
assignDeep,
|
assignDeep,
|
||||||
push,
|
push,
|
||||||
|
scrollLeft,
|
||||||
|
scrollTop,
|
||||||
} from 'support';
|
} from 'support';
|
||||||
import { getEnvironment } from 'environment';
|
import { getEnvironment } from 'environment';
|
||||||
import {
|
import {
|
||||||
@@ -28,6 +30,7 @@ import {
|
|||||||
classNameViewport,
|
classNameViewport,
|
||||||
classNameOverflowVisible,
|
classNameOverflowVisible,
|
||||||
classNameScrollbar,
|
classNameScrollbar,
|
||||||
|
classNameViewportArrange,
|
||||||
} from 'classnames';
|
} from 'classnames';
|
||||||
import { createSizeObserver, SizeObserverCallbackParams } from 'observers/sizeObserver';
|
import { createSizeObserver, SizeObserverCallbackParams } from 'observers/sizeObserver';
|
||||||
import { createTrinsicObserver } from 'observers/trinsicObserver';
|
import { createTrinsicObserver } from 'observers/trinsicObserver';
|
||||||
@@ -91,14 +94,21 @@ export const createStructureSetupObservers = (
|
|||||||
_initialValue: { w: 0, h: 0 },
|
_initialValue: { w: 0, h: 0 },
|
||||||
},
|
},
|
||||||
() => {
|
() => {
|
||||||
const has = _viewportHasClass(classNameOverflowVisible, dataValueHostOverflowVisible);
|
const hasOver = _viewportHasClass(classNameOverflowVisible, dataValueHostOverflowVisible);
|
||||||
has && _viewportAddRemoveClass(classNameOverflowVisible, dataValueHostOverflowVisible);
|
const hasVpStyle = _viewportHasClass(classNameViewportArrange, '');
|
||||||
|
const scrollOffsetX = hasVpStyle && scrollLeft(_viewport);
|
||||||
|
const scrollOffsetY = hasVpStyle && scrollTop(_viewport);
|
||||||
|
_viewportAddRemoveClass(classNameOverflowVisible, dataValueHostOverflowVisible);
|
||||||
|
_viewportAddRemoveClass(classNameViewportArrange, '');
|
||||||
|
|
||||||
const contentScroll = scrollSize(_content);
|
const contentScroll = scrollSize(_content);
|
||||||
const viewportScroll = scrollSize(_viewport);
|
const viewportScroll = scrollSize(_viewport);
|
||||||
const fractional = fractionalSize(_viewport);
|
const fractional = fractionalSize(_viewport);
|
||||||
|
|
||||||
has && _viewportAddRemoveClass(classNameOverflowVisible, dataValueHostOverflowVisible, true);
|
_viewportAddRemoveClass(classNameOverflowVisible, dataValueHostOverflowVisible, hasOver);
|
||||||
|
_viewportAddRemoveClass(classNameViewportArrange, '', hasVpStyle);
|
||||||
|
scrollLeft(_viewport, scrollOffsetX);
|
||||||
|
scrollTop(_viewport, scrollOffsetY);
|
||||||
return {
|
return {
|
||||||
w: viewportScroll.w + contentScroll.w + fractional.w,
|
w: viewportScroll.w + contentScroll.w + fractional.w,
|
||||||
h: viewportScroll.h + contentScroll.h + fractional.h,
|
h: viewportScroll.h + contentScroll.h + fractional.h,
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
import { each, isNumber, scrollLeft, scrollTop, assignDeep, keys } from 'support';
|
import { each, scrollLeft, scrollTop, assignDeep, keys } from 'support';
|
||||||
import { getEnvironment } from 'environment';
|
import { getEnvironment } from 'environment';
|
||||||
import {
|
import {
|
||||||
createTrinsicUpdateSegment,
|
createTrinsicUpdateSegment,
|
||||||
@@ -107,12 +107,8 @@ export const createStructureSetupUpdate = (
|
|||||||
);
|
);
|
||||||
});
|
});
|
||||||
|
|
||||||
if (isNumber(scrollOffsetX)) {
|
scrollLeft(_viewport, scrollOffsetX);
|
||||||
scrollLeft(_viewport, scrollOffsetX);
|
scrollTop(_viewport, scrollOffsetY);
|
||||||
}
|
|
||||||
if (isNumber(scrollOffsetY)) {
|
|
||||||
scrollTop(_viewport, scrollOffsetY);
|
|
||||||
}
|
|
||||||
|
|
||||||
return adaptivedUpdateHints;
|
return adaptivedUpdateHints;
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
import { from } from 'support/utils/array';
|
import { from } from 'support/utils/array';
|
||||||
import { isUndefined } from 'support/utils/types';
|
import { isNull, isUndefined } from 'support/utils/types';
|
||||||
|
|
||||||
type GetSetPropName = 'scrollLeft' | 'scrollTop' | 'value';
|
type GetSetPropName = 'scrollLeft' | 'scrollTop' | 'value';
|
||||||
|
|
||||||
@@ -14,20 +14,20 @@ type Attr = {
|
|||||||
|
|
||||||
type GetSetProp<T> = {
|
type GetSetProp<T> = {
|
||||||
(elm: HTMLElement | false | null | undefined): T;
|
(elm: HTMLElement | false | null | undefined): T;
|
||||||
(elm: HTMLElement | false | null | undefined, value: T): void;
|
(elm: HTMLElement | false | null | undefined, value: T | false | null): void;
|
||||||
(elm: HTMLElement | false | null | undefined, value?: T): number | void;
|
(elm: HTMLElement | false | null | undefined, value?: T | false | null): T | void;
|
||||||
};
|
};
|
||||||
|
|
||||||
const getSetProp = (
|
const getSetProp = (
|
||||||
topLeft: GetSetPropName,
|
topLeft: GetSetPropName,
|
||||||
fallback: number | string,
|
fallback: number | string,
|
||||||
elm: HTMLElement | HTMLInputElement | false | null | undefined,
|
elm: HTMLElement | HTMLInputElement | false | null | undefined,
|
||||||
value?: number | string
|
value?: number | string | false | null
|
||||||
): number | string | void => {
|
): number | string | void => {
|
||||||
if (isUndefined(value)) {
|
if (isUndefined(value)) {
|
||||||
return elm ? elm[topLeft] : fallback;
|
return elm ? elm[topLeft] : fallback;
|
||||||
}
|
}
|
||||||
elm && (elm[topLeft] = value);
|
elm && !isNull(value) && value !== false && (elm[topLeft] = value);
|
||||||
};
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -103,7 +103,7 @@ export const removeAttr = (elm: Element | false | null | undefined, attrName: st
|
|||||||
*/
|
*/
|
||||||
export const scrollLeft = ((
|
export const scrollLeft = ((
|
||||||
elm: HTMLElement | false | null | undefined,
|
elm: HTMLElement | false | null | undefined,
|
||||||
value?: number
|
value?: number | false | null
|
||||||
): number | void => getSetProp('scrollLeft', 0, elm, value) as number) as GetSetProp<number>;
|
): number | void => getSetProp('scrollLeft', 0, elm, value) as number) as GetSetProp<number>;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -113,7 +113,7 @@ export const scrollLeft = ((
|
|||||||
*/
|
*/
|
||||||
export const scrollTop = ((
|
export const scrollTop = ((
|
||||||
elm: HTMLElement | false | null | undefined,
|
elm: HTMLElement | false | null | undefined,
|
||||||
value?: number
|
value?: number | false | null
|
||||||
): number | void => getSetProp('scrollTop', 0, elm, value) as number) as GetSetProp<number>;
|
): number | void => getSetProp('scrollTop', 0, elm, value) as number) as GetSetProp<number>;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|||||||
Reference in New Issue
Block a user