@dvcol/common-utils
Version:
Typescript library for common utility functions and constants
46 lines (42 loc) • 1.74 kB
JavaScript
;Object.defineProperty(exports, "__esModule", {value: true});// lib/common/utils/mobile.utils.ts
var useMobileScrollLock = (target = document.body, container = window) => {
return {
lock: () => {
const locked = Number(target.dataset.locked) || 0;
target.dataset.locked = (locked + 1).toString();
if (locked) return false;
target.dataset.offsetX = window.pageXOffset.toString();
target.dataset.offsetY = window.pageYOffset.toString();
target.style.setProperty("--neo-dialog-scroll-offset-x", `-${window.pageXOffset}px`);
target.style.setProperty("--neo-dialog-scroll-offset-y", `-${window.pageYOffset}px`);
target.classList.add("neo-scroll-lock");
return true;
},
unlock: () => {
if (!target.dataset.locked) return false;
if (Number(target.dataset.locked) > 1) console.warn("NeoDialog: Multiple locks are active, scroll lock may not work as expected");
target.classList.remove("neo-scroll-lock");
target.style.removeProperty("--neo-dialog-scroll-offset-x");
target.style.removeProperty("--neo-dialog-scroll-offset-y");
const { offsetX, offsetY } = target.dataset;
container.scrollTo(Number(offsetX), Number(offsetY));
delete target.dataset.locked;
delete target.dataset.offsetX;
delete target.dataset.offsetY;
return true;
},
get target() {
return target;
},
get count() {
return Number(target.dataset.locked) || 0;
},
get locked() {
return !!Number(target.dataset.locked);
},
get offset() {
return { x: Number(target.dataset.offsetX), y: Number(target.dataset.offsetY) };
}
};
};
exports.useMobileScrollLock = useMobileScrollLock;