tweb-i2p/src/components/singleTransition.ts

70 lines
1.7 KiB
TypeScript
Raw Normal View History

2021-08-03 04:44:13 +03:00
/*
* https://github.com/morethanwords/tweb
* Copyright (C) 2019-2021 Eduard Kuzmenko
* https://github.com/morethanwords/tweb/blob/master/LICENSE
*/
import rootScope from "../lib/rootScope";
2021-09-03 19:33:10 +03:00
const SetTransition = (
element: HTMLElement,
className: string,
forwards: boolean,
duration: number,
onTransitionEnd?: () => void,
useRafs?: number
) => {
2021-09-01 20:17:06 +03:00
const {timeout, raf} = element.dataset;
2021-08-03 04:44:13 +03:00
if(timeout !== undefined) {
clearTimeout(+timeout);
}
2021-09-01 20:17:06 +03:00
if(raf !== undefined) {
window.cancelAnimationFrame(+raf);
if(!useRafs) {
delete element.dataset.raf;
}
}
// if(forwards && className && element.classList.contains(className) && !element.classList.contains('animating')) {
// return;
// }
2021-09-03 19:33:10 +03:00
if(useRafs && rootScope.settings.animationsEnabled && duration) {
2021-09-01 20:17:06 +03:00
element.dataset.raf = '' + window.requestAnimationFrame(() => {
delete element.dataset.raf;
SetTransition(element, className, forwards, duration, onTransitionEnd, useRafs - 1);
});
return;
}
2021-08-03 04:44:13 +03:00
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();
};
2021-09-03 19:33:10 +03:00
if(!rootScope.settings.animationsEnabled || !duration) {
2021-08-03 04:44:13 +03:00
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;