IntersectionObserver 在 Vue 中不触发回调是为什么?
我在 Vue 里用 IntersectionObserver 监听一个元素是否进入视口,但回调一直没执行,不知道哪里出错了。
我已经确认元素确实滚动到了可视区域,也试过调整 threshold 和 rootMargin,但都没用。控制台也没有报错,就是完全没反应。
<template>
<div ref="target" class="box">观察我</div>
</template>
<script>
export default {
mounted() {
const observer = new IntersectionObserver((entries) => {
console.log('触发了!', entries[0].isIntersecting);
});
observer.observe(this.$refs.target);
}
}
</script>
调试看看,在 observer.observe 之前加一行 log,打印一下这个元素的尺寸:
如果打印出来的 height 是 0,那就好办了,给元素加个最小高度或者检查 CSS。比如:
如果 height 不是 0,那就检查一下是不是 display: none 或者 visibility: hidden,这两种状态 Observer 也是监听不到的。把样式修好,回调立马就能跑起来。