diff --git a/packages/uni-h5/src/helpers/usePreventScroll.ts b/packages/uni-h5/src/helpers/usePreventScroll.ts new file mode 100644 index 0000000000000000000000000000000000000000..76afd3c7ba00e78b589c8a4a28b75daa8431ab11 --- /dev/null +++ b/packages/uni-h5/src/helpers/usePreventScroll.ts @@ -0,0 +1,24 @@ +import { onMounted, onUnmounted } from 'vue' + +let index = 0 +let overflow = '' + +export function preventScroll(prevent: boolean) { + let before = index + index += prevent ? 1 : -1 + index = Math.max(0, index) + if (index > 0) { + if (before === 0) { + overflow = document.body.style.overflow + document.body.style.overflow = 'hidden' + } + } else { + document.body.style.overflow = overflow + overflow = '' + } +} + +export function usePreventScroll() { + onMounted(() => preventScroll(true)) + onUnmounted(() => preventScroll(false)) +} diff --git a/packages/uni-h5/src/service/api/location/openLocation/LocationView.tsx b/packages/uni-h5/src/service/api/location/openLocation/LocationView.tsx index 036780e7bd22ecaa2c88145000579a1c486ae00d..93907a4f3d6deb17a24f0346eef97f202e6911ca 100644 --- a/packages/uni-h5/src/service/api/location/openLocation/LocationView.tsx +++ b/packages/uni-h5/src/service/api/location/openLocation/LocationView.tsx @@ -7,6 +7,7 @@ import { computed, } from 'vue' import { createSvgIconVNode, ICON_PATH_BACK } from '@dcloudio/uni-core' +import { usePreventScroll } from '../../../../helpers/usePreventScroll' const props = { latitude: { @@ -36,6 +37,7 @@ export default /*#__PURE__*/ defineComponent({ props, emits: ['close'], setup(props, { emit }) { + usePreventScroll() const mapRef: Ref = ref(null) const key = __uniConfig.qqMapKey const referer = 'uniapp' diff --git a/packages/uni-h5/src/service/api/media/previewImage/ImagePreview.tsx b/packages/uni-h5/src/service/api/media/previewImage/ImagePreview.tsx index e5960fbb1363c8c8711cb484e6c4b224f6f4a4da..930ead6443279f5b2928bcb089b18b0d2c609319 100644 --- a/packages/uni-h5/src/service/api/media/previewImage/ImagePreview.tsx +++ b/packages/uni-h5/src/service/api/media/previewImage/ImagePreview.tsx @@ -9,6 +9,7 @@ import { nextTick, } from 'vue' import { Swiper, SwiperItem } from '@dcloudio/uni-components' +import { usePreventScroll } from '../../../../helpers/usePreventScroll' import ImageView from './ImageView' const props = { @@ -40,6 +41,7 @@ export default /*#__PURE__*/ defineComponent({ props, emits: ['close'], setup(props, { emit }) { + usePreventScroll() const rootRef: Ref = ref(null) const indexRef = ref(getIndex(props)) watch( @@ -98,6 +100,7 @@ export default /*#__PURE__*/ defineComponent({ >