UNPKG

@flexis/ui

Version:

Styleless React Components

49 lines 3.04 kB
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=