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