quasar
Version:
Build high-performance VueJS user interfaces (SPA, PWA, SSR, Mobile and Desktop) in record time
47 lines (36 loc) • 1.09 kB
JavaScript
import { ref, watch, onBeforeUnmount } from 'vue'
import { listenOpts } from '../../utils/event.js'
export default function (
props,
configureScrollTarget
) {
const localScrollTarget = ref(null)
let scrollFn
function changeScrollEvent (scrollTarget, fn) {
const fnProp = `${ fn !== void 0 ? 'add' : 'remove' }EventListener`
const fnHandler = fn !== void 0 ? fn : scrollFn
if (scrollTarget !== window) {
scrollTarget[ fnProp ]('scroll', fnHandler, listenOpts.passive)
}
window[ fnProp ]('scroll', fnHandler, listenOpts.passive)
scrollFn = fn
}
function unconfigureScrollTarget () {
if (localScrollTarget.value !== null) {
changeScrollEvent(localScrollTarget.value)
localScrollTarget.value = null
}
}
const noParentEventWatcher = watch(() => props.noParentEvent, () => {
if (localScrollTarget.value !== null) {
unconfigureScrollTarget()
configureScrollTarget()
}
})
onBeforeUnmount(noParentEventWatcher)
return {
localScrollTarget,
unconfigureScrollTarget,
changeScrollEvent
}
}