usePageScrollInjection.js 932 B

123456789101112131415161718192021222324252627
  1. import {onPageScroll} from '@dcloudio/uni-app'
  2. import {ref, onActivated, onDeactivated, watch} from 'vue'
  3. import {injectLocal, provideLocal} from "@vueuse/core";
  4. const injectKey = Symbol('PAGE_SCROLL')
  5. export const useProvidePageScroll = function () {
  6. const scrollTop = ref(0)
  7. const scrollTopCache = ref(0)
  8. onPageScroll((e) => {
  9. scrollTop.value = e.scrollTop
  10. })
  11. // onPageScroll貌似是个全局事件,
  12. // 用onActivated,onDeactivated来尝试修复页面跳转导致的scrollTop被重置的问题
  13. onDeactivated(() => scrollTopCache.value = scrollTop.value)
  14. onActivated(() => scrollTop.value = scrollTopCache.value)
  15. // watch(scrollTop, val => console.log('scrollTop set', val)) // 调试用
  16. provideLocal(injectKey, {scrollTop, scrollTopCache}) // 形成解构模式
  17. return scrollTop
  18. }
  19. export const useInjectPageScroll = function () {
  20. return injectLocal(injectKey)
  21. }