Может быть что-то вроде:
var _handler = null;
var images = document.querySelectorAll('.shadow');
var length = images.length;
function attachHandler(index) {
if(_handler) {
// remove the click handler from the previous image
images[index-1].removeEventListener('click', _handler, false);
_handler = null;
}
if(index < length) {
var handler = function(event) {
flipDown(event);
attachHandler(index+1); // add the click handler to next image
}
images[index].addEventListener('click', handler, false);
_handler = handler; // capture reference for removal
}
}
attachHandler(0);
Это генерирует и добавляет прослушиватели событий только при необходимости.
Важное примечание: возвращаемым значением querySelectorAll()
является NodeList
, равное live . Это означает, что каждый раз, когда вы вызываете length
для этого объекта, список переоценивается (элементы снова ищутся), что увеличивает производительность. Таким образом, никогда не используйте list.length
в цикле for
. Захватите length
заранее.
Рабочая ДЕМО
Если вы хотите, чтобы это происходило в цикле, просто удалите оператор if
(сохраните тело, конечно) и выполните
index = index % length;