EDIT 2(使问题更容易理解)获得前一个元素在循环
我想达到的效果是:每次一个元素进入检视一个“是可见的”类添加到它和相同的'可见'类是从前一个元素中删除。
现在我已经设法使其工作,但我运行for
循环删除所有is-visible
类,然后将is-visible
类添加到视口中的元素。
它的工作原理,但在性能方面,我认为最好从element[i -1]
中删除该类。而这是我无法得到它的工作。
这里是一个简化小提琴,我试图使element[i-1]
解决方案工作:https://jsfiddle.net/epigeyre/vm36fpuo/11/。
EDIT 1(回答一些问题)
我以一个模运算修正通过@Catalin扬库(非常感谢您提出的宝贵帮助)提出的一个问题((i+len-1)%len
)。
原来的问题(真不明白)
我想用下面的代码来获取前一个元素在for
环(改变其类):
for (var i = 0; i < array.length; i++) {
if(array[i-1] && my other conditions) {
array[i-1].classList.remove('is-visible');
array[i].classList.add('is-visible');
}
}
但它不会删除[i-1]
元素的类。
这里是我的模块的代码更完整的一块(这是一个scroll
事件侦听内运行):
var services = document.getElementsByClassName('services'),
contRect = servicesContainer.getBoundingClientRect();
for (var i = 0; i < services.length; i++) {
var serviceRect = services[i].getBoundingClientRect();
if (!services[i].classList.contains('active') && Math.round(serviceRect.left) < contRect.right && services[i-1]) {
services[i-1].classList.remove('is-visible');
services[i].classList.add('is-visible');
}
}
感谢您的帮助!
嗯,不,它只会得到前一个。但由于它在for循环中,所以每次迭代都会得到前一个循环。 – stybl
这句话没有任何意义'但是看起来[i-1]正在获取所有以前的元素,而不是前一个元素。“ - 这确实只能读取数组中的前一个实例。 PLease提供一个[mcve]来演示你确切的问题。 – Jamiec
在第一次迭代中,我是0 ...因此,您得到的所有元素可能是因为您引用了0-1 = -1数组元素...或者您需要为此获取错误。 – golddragon007