【问题标题】:IntersectionObserver isIntersecting property never is false if threshold greater than 0如果阈值大于 0,IntersectionObserver isIntersecting 属性永远不会为假
【发布时间】:2018-02-17 02:04:57
【问题描述】:

如果我将 threshold 的值配置为大于 0 的值,isIntersecting 在目标离开视口时永远不会返回 false。但是,如果我将默认阈值保留为 0,则当目标退出视口时,isIntersecting 将返回 false。请参阅下面的示例并删除threshold: 1.0

https://jsfiddle.net/snewcomer24/get0a4xr/1/

这似乎是不同的行为。有人对此行为有解释吗?

【问题讨论】:

    标签: javascript dom intersection-observer


    【解决方案1】:

    这是因为只有当元素超过阈值比率时才会调用观察者回调。

    默认情况下阈值为0,因此当元素进入或离开视口时会调用回调。当您将阈值更改为 1.0 时,您的回调将在元素变为 100% 可见或停止为 100% 可见时调用而不是

    当元素不再是 100% 时,它将是 99% 可见的东西,并且仍然有 isIntersectingtrue。然后,当元素离开视口时,它与您的观察者无关(因为您的阈值不是 0),因此不会再次调用您的回调。

    如果您关心元素变得 100% 可见并离开视口,您可以传递一个数组作为阈值(如 [0, 1.0]),当超过任何这些比率时,您的回调将被调用。

    https://jsfiddle.net/wzst4jx5/12/

    顺便说一句:我原本以为entry.isIntersecting 只是entry.intersectionRatio > 0 的简写。但我发现 Chrome (65) 可以将 isIntersecting 报告为 true,但将 intersectionRatio 报告为 0,当某些东西非常缓慢地进入视口时。

    【讨论】:

    • 我注意到在 Chrome 中,在某些情况下isIntersecting 属性可能始终为true,与任何滚动无关。也许是因为我正在观察 SVG 的子元素。
    • 我有一个水平滚动的画廊。屏幕右侧的图像有isIntersecting=true,但也有intersectionRatio=0。这是一致的行为,而不是基于滚动速度。幻灯片的宽度要么是 100vw,要么是固定的屏幕宽度。
    • 我看到一些非常小的值,例如 0.0009 作为 intersectionRatio,因此我认为 0 在某些情况下只是被四舍五入。但是一个项目可以在屏幕外一个像素并且仍然相交!
    猜你喜欢
    • 2016-02-22
    • 2022-10-06
    • 1970-01-01
    • 2012-11-09
    • 2014-02-21
    • 2015-12-02
    • 2023-03-09
    • 1970-01-01
    • 2019-04-16
    相关资源
    最近更新 更多