交叉口观察者不能使用位置:固定的目标

时间:2018-03-20 16:16:31

标签: javascript intersection-observer

我试图通过交集观察者调用回调。

我希望style: "position: fixed"style.top并移动它 style: "position: relative"

我还使用<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>IO</title> </head> <body> <div style="height: 200px;width: 100%;background: violet" class="upper">aaa</div> <div style="position:relative;height: 200px;width: 100%;background: blueviolet" id="middle">bbb <div id="target" style="position:fixed;top: 0px;width: 50px;height: 50px;background: firebrick">ccc</div> </div> <script> let options = { root: document.getElementById("middle"), rootMargin: '0px', threshold: 0 }; let observer = new IntersectionObserver(entry => { console.log("observer's acting.") }, options); let target = document.getElementById("target"); observer.observe(target); let stepping = 0; let cb = () => { target.style.top = stepping + 'px'; stepping += 4; if (stepping < 300){ setTimeout(cb, 100); } }; window.addEventListener("click", () => { cb(); }) </script> </body> </html> 指定了作为目标祖先的根元素。

但是当目标和观察者相交时,不会触发回调函数。

我错过了一些限制吗?

这是我输入的内容:

ccc

这是一个codepen演示: codepen demo

您可以点击页面中的任意位置开始移动$table->binary('url_hash'); 块。

1 个答案:

答案 0 :(得分:1)

具有position: fixed的元素相对于视口放置,并且视口移动。因此,固定位置的元素在滚动时会“移动”。尽管#target#middle的子代,但我相信IntersectionObserver会利用其在后台计算target是否进入/离开root的方式,由于target在文档流之外而触发回调。

这是一个相关问题。与该问题相关的互连网中没有太多内容:https://bugs.chromium.org/p/chromium/issues/detail?id=653240

注意:在目标上设置position: absolute确实会在进入和离开视口时触发回调。