UNPKG

@shopify/polaris

Version:

Shopify’s product component library

61 lines (48 loc) 1.34 kB
import { isServer } from '../target.js'; var SCROLL_LOCKING_ATTRIBUTE = 'data-lock-scrolling'; var SCROLL_LOCKING_WRAPPER_ATTRIBUTE = 'data-lock-scrolling-wrapper'; var scrollPosition = 0; class ScrollLockManager { constructor() { this.scrollLocks = 0; this.locked = false; } registerScrollLock() { this.scrollLocks += 1; this.handleScrollLocking(); } unregisterScrollLock() { this.scrollLocks -= 1; this.handleScrollLocking(); } handleScrollLocking() { if (isServer) return; var { scrollLocks } = this; var { body } = document; var wrapper = body.firstElementChild; if (scrollLocks === 0) { body.removeAttribute(SCROLL_LOCKING_ATTRIBUTE); if (wrapper) { wrapper.removeAttribute(SCROLL_LOCKING_WRAPPER_ATTRIBUTE); } window.scroll(0, scrollPosition); this.locked = false; } else if (scrollLocks > 0 && !this.locked) { scrollPosition = window.pageYOffset; body.setAttribute(SCROLL_LOCKING_ATTRIBUTE, ''); if (wrapper) { wrapper.setAttribute(SCROLL_LOCKING_WRAPPER_ATTRIBUTE, ''); wrapper.scrollTop = scrollPosition; } this.locked = true; } } resetScrollPosition() { scrollPosition = 0; } } export { SCROLL_LOCKING_ATTRIBUTE, ScrollLockManager };