Я пытаюсь выяснить кнопки остановки/запуска, используя javascript и jQuery. У меня есть jsfiddle, чтобы попытаться это понять, но я не могу заставить его работать: http://jsfiddle.net/kkx7m88c/Завершить .each и setTimeout()
Кнопка запуска должна включать каждый красный цвет по одному. Кнопка «Стоп» должна вернуть все коробки обратно на синий и больше не загораться, пока не будет нажата кнопка «Пуск». В настоящее время кнопка остановки превратит все ящики в синий цвет, но не остановит функцию воспроизведения, а это означает, что коробки, которые не были красными, не прекращаются. Они становятся красными.
Вот мои ЯШ:
// new class turns the boxes red with css
function goClasses(item, container) {
$(container).removeClass('stopped');
$(item).addClass('new');
}
function stopClasses(item, container) {
$(item).removeClass('new');
$(container).addClass('stopped');
}
$('#go').mousedown(function() {
$('.box').each(function(i){
var item = $(this);
var container = $('.selection');
setTimeout(function() {
goClasses(item, container);
}, 500 * i);
if ($(container).hasClass('stopped')) {
//clearTimeout(); /* this doesn't appear to do anything */
//return false; /* this stops the 'go' button from working properly when clicked again after the 'stop' button has clicked */
}
});
});
$('#stop').mousedown(function() {
$('.box').each(function (i) {
var item = $(this);
var container = $('.selection');
stopClasses(item, container);
});
});
Это мое понимание того, что если бы я только мог закончить SetTimeout и .each в разделе MouseDown, что она будет работать ... но, возможно, я его полностью выключен. Может быть, я должен использовать setInterval() вместо этого? Я новичок в jQuery, поэтому я все еще все понял!
Я не думаю, что ваша проблема связана с таймером, это из-за цикла, который продолжается. Попробуйте установить флаг из кнопки остановки и проверьте его в функции запуска, чтобы разбить цикл. –