vueuse 中文文档

Vueuse useIntersectionObserver 检测元素是否可见

Vueuse useIntersectionObserver 检测元素是否可见,与useElementVisibility不同的是你可停止检测行为。

代码示例

<script setup lang="ts">
import { ref } from 'vue'
import { useIntersectionObserver } from '@vueuse/core'
//需要检测元素
const target = ref(null)
//被监测对象是否可见
const isVisible = ref(false)
//isActive 是否可用, pause 暂停检测, resume 重置事件
const { isActive, pause, resume } = useIntersectionObserver(
  target,
  ([{ isIntersecting }]) => {
    isVisible.value = isIntersecting
  },
  { root },
)
</script>
<template> 
    <div ref="target">
      www.itxst.com
    </div> 
</template>

在线例子

例子

指令示例

也可以通过Vue指令获取元素是否可见

<script setup lang="ts">
import { ref } from 'vue'
import { vIntersectionObserver } from '@vueuse/components'
//监测对象
const root = ref(null)
//是否可见
const isVisible = ref(false)
//指令的响应事件
function onIntersectionObserver([{ isIntersecting }]) {
  isVisible.value = isIntersecting
}
</script>
<template>
  <div>
    <p>
      向下滚动试试看!
    </p>
  <!-- 默认的例子 -->
    <div v-intersection-observer="onIntersectionObserver">
      <p>Hello world!</p>
    </div>
  </div>
  <!-- 指定对象的例子 -->
  <div ref="root">
    <p>
      向下滚动试试看!
    </p>
    <div v-intersection-observer="[onIntersectionObserver, { root }]">
      <p>Hello world!</p>
    </div>
  </div>
</template>

类型声明

export interface UseIntersectionObserverOptions extends ConfigurableWindow {
  /**
   * 创建时立即启动IntersectionObserver
   *
   * 默认: true
   */
  immediate?: boolean
  /**
   * 在测试交集时,其边界用作边界框的元素或文档。
   */
  root?: MaybeComputedElementRef
  /**
   * A string which specifies a set of offsets to add to the root's bounding_box when calculating intersections.
   */
  rootMargin?: string
  /**
   * 介于0.0和1之间的数字。
   */
  threshold?: number | number[]
}
export interface UseIntersectionObserverReturn extends Pausable {
  isSupported: Ref<boolean>
  stop: () => void
}
/**
 * Detects that a target element's visibility.
 *
 * @see https://www.itxst.com/vueuse/tutorial.html
 * @param target
 * @param callback
 * @param options
 */
export declare function useIntersectionObserver(
  target:
    | MaybeComputedElementRef
    | MaybeRefOrGetter<MaybeElement[]>
    | MaybeComputedElementRef[],
  callback: IntersectionObserverCallback,
  options?: UseIntersectionObserverOptions
): UseIntersectionObserverReturn
Catalog
vueuse 入门 State 状态 Elements 元素 useActiveElement 焦点元素 useDocumentVisibility 是否可见 useDraggable 拖动元素 useDropZone 文件拖拽区 useElementBounding 获取元素边界 useElementSize 元素大小 useElementVisibility 元素是否可见 useIntersectionObserver 元素是否可见 useMouseInElement 鼠标hover事件 useMutationObserver 监视 DOM 变动 useParentElement 获取父元素 useResizeObserver 监控元素大小 useWindowFocus 窗口焦点状态 useWindowScroll 滚动条位置 useWindowSize 获取窗口大小 Browser 浏览器 Sensors 感应监测