sakura/src/hooks/useWindowScrollLock.ts

31 lines
768 B
TypeScript

import { onUnmounted, onDeactivated } from 'vue'
import getScrollbarWidth from '@/utils/getScrollbarWidth'
export default function () {
const removeScrollLock = () => {
const body = document.querySelector('body')
// TODO: add a fake scroll bar element
if (body instanceof HTMLElement) {
body.style.overflow = 'auto'
body.style.width = '100%'
}
}
const addScrollLock = () => {
const body = document.querySelector('body')
if (body instanceof HTMLElement) {
body.style.overflow = 'hidden'
body.style.width = `calc(100% - ${String(getScrollbarWidth())}px)`
}
}
onUnmounted(() => {
removeScrollLock()
})
onDeactivated(() => {
removeScrollLock()
})
return [removeScrollLock, addScrollLock]
}