fix timeout raf bug

This commit is contained in:
Rene
2022-07-14 23:06:36 +02:00
parent e89dbd0018
commit c807435e65
4 changed files with 17 additions and 3 deletions
@@ -30,5 +30,6 @@ export const classNameScrollbarTrack = 'os-scrollbar-track';
export const classNameScrollbarHandle = 'os-scrollbar-handle'; export const classNameScrollbarHandle = 'os-scrollbar-handle';
export const classNamesScrollbarVisible = `${classNameScrollbar}-visible`; export const classNamesScrollbarVisible = `${classNameScrollbar}-visible`;
export const classNamesScrollbarCornerless = `${classNameScrollbar}-cornerless`; export const classNamesScrollbarCornerless = `${classNameScrollbar}-cornerless`;
export const classNamesScrollbarTransitionless = `${classNameScrollbar}-transitionless`;
export const classNamesScrollbarInteraction = `${classNameScrollbar}-interaction`; export const classNamesScrollbarInteraction = `${classNameScrollbar}-interaction`;
export const classNamesScrollbarAutoHidden = `${classNameScrollbar}-auto-hidden`; export const classNamesScrollbarAutoHidden = `${classNameScrollbar}-auto-hidden`;
@@ -3,6 +3,7 @@ import {
appendChildren, appendChildren,
createDiv, createDiv,
each, each,
isEmptyArray,
on, on,
push, push,
removeClass, removeClass,
@@ -16,6 +17,7 @@ import {
classNameScrollbarTrack, classNameScrollbarTrack,
classNameScrollbarHandle, classNameScrollbarHandle,
classNamesScrollbarInteraction, classNamesScrollbarInteraction,
classNamesScrollbarTransitionless,
} from 'classnames'; } from 'classnames';
import { getEnvironment } from 'environment'; import { getEnvironment } from 'environment';
import { dynamicInitializationElement as generalDynamicInitializationElement } from 'initialization'; import { dynamicInitializationElement as generalDynamicInitializationElement } from 'initialization';
@@ -96,7 +98,10 @@ export const createScrollbarsSetupElements = (
? classNameScrollbarHorizontal ? classNameScrollbarHorizontal
: classNameScrollbarVertical; : classNameScrollbarVertical;
const arrToPush = horizontal ? horizontalScrollbars : verticalScrollbars; const arrToPush = horizontal ? horizontalScrollbars : verticalScrollbars;
const scrollbar = createDiv(`${classNameScrollbar} ${scrollbarClassName} os-theme-dark`); const transitionlessClass = isEmptyArray(arrToPush) ? classNamesScrollbarTransitionless : '';
const scrollbar = createDiv(
`${classNameScrollbar} ${scrollbarClassName} ${transitionlessClass} os-theme-dark`
);
const track = createDiv(classNameScrollbarTrack); const track = createDiv(classNameScrollbarTrack);
const handle = createDiv(classNameScrollbarHandle); const handle = createDiv(classNameScrollbarHandle);
const result = { const result = {
@@ -134,6 +139,11 @@ export const createScrollbarsSetupElements = (
const appendElements = () => { const appendElements = () => {
appendChildren(evaluatedScrollbarSlot, horizontalScrollbars[0]._scrollbar); appendChildren(evaluatedScrollbarSlot, horizontalScrollbars[0]._scrollbar);
appendChildren(evaluatedScrollbarSlot, verticalScrollbars[0]._scrollbar); appendChildren(evaluatedScrollbarSlot, verticalScrollbars[0]._scrollbar);
setTimeout(() => {
addRemoveClassHorizontal(classNamesScrollbarTransitionless);
addRemoveClassVertical(classNamesScrollbarTransitionless);
}, 300);
}; };
generateHorizontalScrollbarStructure(); generateHorizontalScrollbarStructure();
@@ -29,8 +29,8 @@ export interface ScrollbarsSetupStaticState {
const createSelfCancelTimeout = (timeout?: number | (() => number)) => { const createSelfCancelTimeout = (timeout?: number | (() => number)) => {
let id: number; let id: number;
const setT = timeout ? (window.setTimeout as (...args: any[]) => number) : rAF!; const setT = timeout ? (setTimeout as (...args: any[]) => number) : rAF!;
const clearT = timeout ? window.clearTimeout : cAF!; const clearT = timeout ? clearTimeout : cAF!;
return [ return [
(callback: () => any) => { (callback: () => any) => {
clearT(id); clearT(id);
@@ -6,6 +6,9 @@
opacity: 0; opacity: 0;
visibility: hidden; visibility: hidden;
} }
.os-scrollbar-transitionless {
transition: none;
}
.os-scrollbar-track { .os-scrollbar-track {
pointer-events: auto; pointer-events: auto;
position: relative; position: relative;