Как прокрутить детей addclass, а затем удалить класс в одной итерации setTimout не работает? - PullRequest
1 голос
/ 16 декабря 2011

HTML

<div id="slides">  
    <div id="one">Slide 1</div>  
    <div id="two">Slide 2</div>  
    <div id="three">Slide 3</div>  
</div>

CSS

#slides .show{
    display: block;
}
#slides div{
    display: none;
}

Скрипт

var slides = $('#slides').children();

var i = 0;
function play(){
    $(slides[i]).addClass('show');
    setTimeout($(slides[i]).removeClass('show'), 500); /* does nothing */
    i++;
    setTimeout(play, 3000); 
}

play();

Я получил это, и он показывает слайд по одному, но не удаляетих.Хотите знать, как установить removeClass, чтобы подождать секунду, прежде чем фактически удалить его.

ОБНОВЛЕНО jsfiddle ссылка ниже

http://jsfiddle.net/WbsxQ/6/

Спасибо!

Ответы [ 2 ]

1 голос
/ 16 декабря 2011

Когда срабатывает setTimeout, ваш цикл был закончен давно.Попробуйте поместить элемент slides[i] - в глобальную переменную (вам не нужен еще один $).

elementToHide = slides[i];
setTimeout(function(){elementToHide.removeClass('show')}, 500);
1 голос
/ 16 декабря 2011

Я не знаю, является ли это единственной ошибкой, но, по крайней мере, setTimeout нужна функция (или строка, но давайте не будем идти туда), а не результат вызова (если результат не является функцией струна ... вы получаете дрейф) ... так что,

setTimeout(function() { $(slide[i]).removeClass('show') }, 500);

(на самом деле было бы красивее, если бы он был преобразован в переменную, но это работает для иллюстрации контраста)

...