tweb/src/components/singleTransition.ts
2021-04-08 17:52:31 +04:00

43 lines
1.1 KiB
TypeScript

/*
* https://github.com/morethanwords/tweb
* Copyright (C) 2019-2021 Eduard Kuzmenko
* https://github.com/morethanwords/tweb/blob/master/LICENSE
*/
import rootScope from "../lib/rootScope";
const SetTransition = (element: HTMLElement, className: string, forwards: boolean, duration: number, onTransitionEnd?: () => void) => {
const timeout = element.dataset.timeout;
if(timeout !== undefined) {
clearTimeout(+timeout);
}
if(forwards && className) {
element.classList.add(className);
}
const afterTimeout = () => {
delete element.dataset.timeout;
if(!forwards && className) {
element.classList.remove('backwards', className);
}
element.classList.remove('animating');
onTransitionEnd && onTransitionEnd();
};
if(!rootScope.settings.animationsEnabled) {
element.classList.remove('animating', 'backwards');
afterTimeout();
return;
}
element.classList.add('animating');
element.classList.toggle('backwards', !forwards);
element.dataset.timeout = '' + setTimeout(afterTimeout, duration);
};
export default SetTransition;