feat 搭建架构骨架
This commit is contained in:
29
src/composables/useIntersection.ts
Normal file
29
src/composables/useIntersection.ts
Normal file
@@ -0,0 +1,29 @@
|
||||
import { onMounted, onUnmounted, ref, type Ref } from 'vue'
|
||||
|
||||
/** 元素可见性(配合图片懒加载/曝光统计) */
|
||||
export function useIntersection(
|
||||
target: Ref<Element | null | undefined>,
|
||||
options?: IntersectionObserverInit,
|
||||
): {
|
||||
isVisible: Ref<boolean>
|
||||
} {
|
||||
const isVisible = ref(false)
|
||||
let observer: IntersectionObserver | null = null
|
||||
|
||||
onMounted(() => {
|
||||
const el = target.value
|
||||
if (!el) return
|
||||
observer = new IntersectionObserver((entries) => {
|
||||
const entry = entries[0]
|
||||
if (entry) isVisible.value = entry.isIntersecting
|
||||
}, options)
|
||||
observer.observe(el)
|
||||
})
|
||||
|
||||
onUnmounted(() => {
|
||||
observer?.disconnect()
|
||||
observer = null
|
||||
})
|
||||
|
||||
return { isVisible }
|
||||
}
|
||||
Reference in New Issue
Block a user