![](/img/trans.png)
[英]Intersection Observer API does not work with transform: translateX()
[英]Intersection observer does not work with target with position: fixed
我正在嘗試通過路口觀察器調用回調。
我希望target
是style: "position: fixed"
並通過style.top
移動它。
我還指定了根元素,它是具有style: "position: relative"
。
但是當目標和觀察者相交時,不會觸發回調function。
我錯過了一些限制嗎?
這是我輸入的內容:
<!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>
這是一個 codepen 演示: codepen demo
您可以單擊頁面中的任意位置以開始移動ccc
塊。
position: fixed
元素相對於視口放置,並且視口移動。 因此,固定位置的元素在滾動時會“移動”。 盡管#target
是#target
的子#middle
,但我相信IntersectionObserver及其在#middle
使用的用於計算target
是否進入/離開root
,都永遠不會觸發回調,因為target
位於文檔流之外。
這是一個相關的問題。 與該問題有關的互聯網站點中沒有太多內容: https ://bugs.chromium.org/p/chromium/issues/detail?id=653240
注意:設置position: absolute
目標的position: absolute
確實會在進入和離開視口時觸發回調。
在我的例子中,我的根元素(帶有 position:fixed)與我想要觀察的元素(可滾動)處於相同的 DOM 層次結構級別,並且沒有觸發任何事件。
<div id="root" style="position:fixed"></div>
<div id="scrollable"></div>
當我將元素放在根內時,事件觸發。
<div id="root" style="position:fixed">
<div id="scrollable"></div>
</div>
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.