@flexis/ui
Version:
Styleless React Components
49 lines • 3.04 kB
JavaScript
const elementsOverflows = new Map();
function blockElement(element) {
const overflow = elementsOverflows.get(element);
if (overflow) {
overflow.count++;
}
else {
elementsOverflows.set(element, {
count: 1,
value: element.style.overflow
});
element.style.overflow = 'hidden';
}
}
function unblockElement(element) {
const overflow = elementsOverflows.get(element);
if (!overflow) {
return;
}
overflow.count--;
if (!overflow.count) {
element.style.overflow = overflow.value;
elementsOverflows.delete(element);
}
}
/**
* Block scroll.
* @param element - HTML-element to block scroll.
* @return Unblock scroll.
*/
export function blockScroll(element = document.body) {
const { documentElement } = document;
let currentElement = element;
let restore = [];
do {
restore.push(currentElement);
blockElement(currentElement);
currentElement = currentElement.parentElement;
} while (currentElement !== documentElement);
currentElement = null;
return () => {
if (restore === null) {
return;
}
restore.forEach(unblockElement);
restore = null;
};
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmxvY2tTY3JvbGwuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvaGVscGVycy9ibG9ja1Njcm9sbC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFNQSxNQUFNLGlCQUFpQixHQUFHLElBQUksR0FBRyxFQUFpQyxDQUFDO0FBRW5FLFNBQVMsWUFBWSxDQUFDLE9BQW9CO0lBRXpDLE1BQU0sUUFBUSxHQUFHLGlCQUFpQixDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUVoRCxJQUFJLFFBQVEsRUFBRTtRQUNiLFFBQVEsQ0FBQyxLQUFLLEVBQUUsQ0FBQztLQUNqQjtTQUFNO1FBQ04saUJBQWlCLENBQUMsR0FBRyxDQUFDLE9BQU8sRUFBRTtZQUM5QixLQUFLLEVBQUssQ0FBQztZQUNYLEtBQUssRUFBRSxPQUFPLENBQUMsS0FBSyxDQUFDLFFBQVE7U0FDN0IsQ0FBQyxDQUFDO1FBQ0gsT0FBTyxDQUFDLEtBQUssQ0FBQyxRQUFRLEdBQUcsUUFBUSxDQUFDO0tBQ2xDO0FBQ0YsQ0FBQztBQUVELFNBQVMsY0FBYyxDQUFDLE9BQW9CO0lBRTNDLE1BQU0sUUFBUSxHQUFHLGlCQUFpQixDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUVoRCxJQUFJLENBQUMsUUFBUSxFQUFFO1FBQ2QsT0FBTztLQUNQO0lBRUQsUUFBUSxDQUFDLEtBQUssRUFBRSxDQUFDO0lBRWpCLElBQUksQ0FBQyxRQUFRLENBQUMsS0FBSyxFQUFFO1FBQ3BCLE9BQU8sQ0FBQyxLQUFLLENBQUMsUUFBUSxHQUFHLFFBQVEsQ0FBQyxLQUFLLENBQUM7UUFDeEMsaUJBQWlCLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFDO0tBQ2xDO0FBQ0YsQ0FBQztBQUVEOzs7O0dBSUc7QUFDSCxNQUFNLFVBQVUsV0FBVyxDQUFDLE9BQU8sR0FBRyxRQUFRLENBQUMsSUFBSTtJQUVsRCxNQUFNLEVBQ0wsZUFBZSxFQUNmLEdBQUcsUUFBUSxDQUFDO0lBQ2IsSUFBSSxjQUFjLEdBQUcsT0FBTyxDQUFDO0lBQzdCLElBQUksT0FBTyxHQUFrQixFQUFFLENBQUM7SUFFaEMsR0FBRztRQUVGLE9BQU8sQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLENBQUM7UUFDN0IsWUFBWSxDQUFDLGNBQWMsQ0FBQyxDQUFDO1FBRTdCLGNBQWMsR0FBRyxjQUFjLENBQUMsYUFBYSxDQUFDO0tBRTlDLFFBQVEsY0FBYyxLQUFLLGVBQWUsRUFBRTtJQUU3QyxjQUFjLEdBQUcsSUFBSSxDQUFDO0lBRXRCLE9BQU8sR0FBRyxFQUFFO1FBRVgsSUFBSSxPQUFPLEtBQUssSUFBSSxFQUFFO1lBQ3JCLE9BQU87U0FDUDtRQUVELE9BQU8sQ0FBQyxPQUFPLENBQUMsY0FBYyxDQUFDLENBQUM7UUFDaEMsT0FBTyxHQUFHLElBQUksQ0FBQztJQUNoQixDQUFDLENBQUM7QUFDSCxDQUFDIn0=