将forEach()方法更改为For循环,以便与IntersectionObserver-Javascript一起使用

将forEach()方法更改为For循环,以便与IntersectionObserver-Javascript一起使用,javascript,for-loop,foreach,intersection-observer,Javascript,For Loop,Foreach,Intersection Observer,我有下面的IntersectionObserver代码,它作为一个滚动触发器在一个网站上运行,所有这些都正常 但是,我想将用作IntersectionObserver调用的forEach()方法切换到for循环,但我无法使其工作 我相信这是可以做到的,但这让我有点疯狂 之所以要这样做,是因为我使用的是polyfill,所以IntersectionObserver可以在旧版本的IE和Edge中工作,但forEach()方法当然不能在这些浏览器中工作 我已经注释掉了代码底部的循环尝试 任何帮助都将是

我有下面的IntersectionObserver代码,它作为一个滚动触发器在一个网站上运行,所有这些都正常

但是,我想将用作IntersectionObserver调用的forEach()方法切换到for循环,但我无法使其工作

我相信这是可以做到的,但这让我有点疯狂

之所以要这样做,是因为我使用的是polyfill,所以IntersectionObserver可以在旧版本的IE和Edge中工作,但forEach()方法当然不能在这些浏览器中工作

我已经注释掉了代码底部的循环尝试

任何帮助都将是惊人的

代码笔:

window.addEventListener(“加载”,函数(){
窗口中的var iO=“IntersectionObserver;”/*如果支持,则为true*/
var-box=document.querySelectorAll('.box');
如果(iO){
常量配置={
root:null,//将框架元素设置为视口
rootMargin:'0px',
阈值:.5
};
let observer=新的IntersectionObserver(函数(条目){
条目.forEach(功能(项){
如果(item.intersectionRatio>.5){
item.target.classList.add(“活动”);
}否则{
item.target.classList.remove(“活动”);
}
});
},config);
框.forEach(功能(项目){
观察员.观察(项目1);
});
//对于(i=0;i
正文{
字体系列:arial;
保证金:0;
填充:0;
显示器:flex;
弯曲方向:立柱;
证明内容:中心;
对齐项目:居中;
高度:280vh;
}
.盒子{
位置:相对位置;
保证金:1rem 0;
宽度:100px;
高度:100px;
背景:蓝色;
不透明度:1;
过渡期:所有;
显示器:flex;
证明内容:中心;
对齐项目:居中;
颜色:#fff;
}
#框1{
边缘底部:100px;
}
.主动{
背景:红色;
不透明度:1;
}
框1

框2
您有一个观察者,但您正在对其应用索引。当您在框上迭代时,您的索引访问器应该在框上

for (i = 0; i < box.length; i++) {
    observer.observe(box[i]);
}
for(i=0;i

这应该行得通,不过还没有经过测试。

您只有一个观察者,但您正在对其应用索引。当您在框上迭代时,您的索引访问器应该在框上

for (i = 0; i < box.length; i++) {
    observer.observe(box[i]);
}
for(i=0;i

这应该行得通,不过还没有经过测试。

您也可以将
forEach
聚合填充,或者将
box
转换为数组。您也可以将
forEach
聚合填充,或者将
box
转换为数组。谢谢Phil。我真不敢相信一些卑鄙的人竟然投票反对这个问题欢迎你!不过,作为记录,我没有看到任何人对这个问题投反对票——也许这是一个错误。是的,投了一票,然后发生了一次路过。无论如何,更重要的是我得到了一个答案:)谢谢菲尔。我真不敢相信一些卑鄙的人竟然投票反对这个问题欢迎你!不过,作为记录,我没有看到任何人对这个问题投反对票——也许这是一个错误。是的,投了一票,然后发生了一次路过。无论如何,更重要的是,我得到了一个答案:)