Я не совсем уверен, что делает .die (), но на jsfiddle, кажется, ускоряет интервал времени.
Это потому, что этот код:
playing().die();
... эквивалентно этому:
var playingResult = playing();
playingResult.die();
То есть сначала вызывается функция playing()
, которая всегда создает другой интервал.Затем он пытается вызвать метод die()
для того, что было возвращено из playing()
, который всегда является просто идентификатором интервала, т. Е. Числом, которое не имеет метода die()
(и выдаст ошибку).
То же самое относится к playing().live()
- поэтому, по сути, каждый раз, когда вы нажимаете любую кнопку, добавляется еще один интервал, который означает, что фактический вывод на экран ускоряется.
Вам нужно установить и очиститьтот же интервал с использованием setInterval()
и clearInterval()
, или в основном оставляет интервал работающим все время, но помещает тест в свой обратный вызов, чтобы проверить, не приостановлен ли он в данный момент.Ответ Якоба Эттингера прекрасно показывает, как установить и очистить интервал , не создавая дублирующихся интервалов , если Play нажимается несколько раз подряд (ни один из других ответов для проверки даты для этого).Другой способ сделать это следующим образом:
(function($){
var playing = false,
intervalId = setInterval(function() {
if (!playing)
return;
$(".divafter").after("playing <br/>");
}, 500);
$(".play").click(function(){
playing = true;
});
$(".pause").click(function(){
playing = false;
});
})(jQuery);
Демо: http://jsfiddle.net/ExCKW/