UNPKG

vuestic-ui

Version:
1 lines 1.95 kB
{"version":3,"file":"useScroll.mjs","sources":["../../../../src/composables/useScroll.ts"],"sourcesContent":["import { onMounted, onBeforeUnmount, ref, shallowRef } from 'vue'\n\nfunction getTargetElement (target: HTMLElement | string | undefined) {\n if (!target) { throw new Error('No target was provided for `useScroll` hook!') }\n return typeof target === 'string' ? document.querySelector(target) as HTMLElement : target\n}\n\nexport function setupScroll (fixed?: boolean, target?: HTMLElement | string) {\n const scrollRoot = shallowRef<HTMLElement>()\n let targetElement: HTMLElement | Window | undefined\n\n const isScrolledDown = ref(false)\n const prevScrollPosition = ref(0)\n\n const onScroll = (e: Event) => {\n const target = e.target as HTMLElement | Window\n // @ts-ignore\n const scrollValue = e.target instanceof Window ? target.scrollY : target.scrollTop\n\n isScrolledDown.value = prevScrollPosition.value < scrollValue\n prevScrollPosition.value = scrollValue\n }\n\n onMounted(() => {\n targetElement = fixed ? window : getTargetElement(target || scrollRoot.value)\n targetElement?.addEventListener('scroll', onScroll, fixed)\n })\n\n onBeforeUnmount(() => {\n targetElement?.removeEventListener('scroll', onScroll)\n })\n\n return { scrollRoot, isScrolledDown }\n}\n"],"names":["target"],"mappings":";AAEA,SAAS,iBAAkB,QAA0C;AACnE,MAAI,CAAC,QAAQ;AAAQ,UAAA,IAAI,MAAM,8CAA8C;AAAA,EAAE;AAC/E,SAAO,OAAO,WAAW,WAAW,SAAS,cAAc,MAAM,IAAmB;AACtF;AAEgB,SAAA,YAAa,OAAiB,QAA+B;AAC3E,QAAM,aAAa;AACf,MAAA;AAEE,QAAA,iBAAiB,IAAI,KAAK;AAC1B,QAAA,qBAAqB,IAAI,CAAC;AAE1B,QAAA,WAAW,CAAC,MAAa;AAC7B,UAAMA,UAAS,EAAE;AAEjB,UAAM,cAAc,EAAE,kBAAkB,SAASA,QAAO,UAAUA,QAAO;AAE1D,mBAAA,QAAQ,mBAAmB,QAAQ;AAClD,uBAAmB,QAAQ;AAAA,EAAA;AAG7B,YAAU,MAAM;AACd,oBAAgB,QAAQ,SAAS,iBAAiB,UAAU,WAAW,KAAK;AAC7D,mDAAA,iBAAiB,UAAU,UAAU;AAAA,EAAK,CAC1D;AAED,kBAAgB,MAAM;AACL,mDAAA,oBAAoB,UAAU;AAAA,EAAQ,CACtD;AAEM,SAAA,EAAE,YAAY;AACvB;"}