【发布时间】:2021-05-10 20:21:40
【问题描述】:
我正在尝试使用 intersectionObserver 定位父元素和子元素,然后我有一个函数将父元素的背景更改为不同的颜色并旋转子元素。
此代码适用于父 div,但子项返回未定义。 是我无法使用 querySelector 定位子元素,还是 intersectionObserver 无法观察多个元素?
let options = {
threshold: 0.25
}
let observer = new IntersectionObserver(function(entries, observer) {
entries.forEach(entry => {
if (!entry.isIntersecting) {
return;
} else {
console.log(entry.target);
console.log(entry.sticky);
alert('INTERSECTING!');
entry.target.classList.toggle("red");
entry.sticky.classList.toggle("rotate");
}
});
}, options);
let target = document.querySelector('.placeholder__div__large');
let sticky = document.querySelector('.sticky__container');
observer.observe(target, sticky);
.placeholder__div__large {
height: 200vh;
width: 100vw;
display: flex;
align-items: center;
justify-content: center;
color: white;
background: black;
transition: 2s;
}
.sticky__container {
position: sticky;
top: 100px;
width: 200px;
height: 200px;
}
.sticky__item {
display: flex;
justify-content: center;
align-items: center;
text-align: center;
background: white;
color: black;
width: 100%;
height: 100%;
}
.red {
background: red;
transition: 2s;
}
.rotate {
transform: rotate(180deg);
}
<div class="placeholder__div__large">
<div class="sticky__container">
<div class="sticky__item">STICKY ITEM</div>
</div>
</div>
【问题讨论】:
-
observe将一个元素作为参数。您需要明确地观察两者。阅读the docs。 -
entry.sticky 也没有任何意义 - 请参阅 [link]developer.mozilla.org/en-US/docs/Web/API/…,其中包含条目所包含内容的列表。
标签: javascript html css queryselector