Вы создали явную бесконечную рекурсию.Вы звоните blink
, который звонит fadeOut
, который звонит callback
, который звонит blink
.Я бы посоветовал вам переписать эту функцию с помощью setInterval, например:
this.fadeDuration = 200;
this.blinkIntervalRef = null;
this.blink = function(){
this.blinkIntervalRef = setInterval(
function(){this.doBlink();},
this.fadeDuration*3
);
}
this.stop = function() {clearInterval(this.blinkIntervalRef );}
this.doBlink = function(){
//this is just shortcut, not to make horizontal scroll
var interval = this.blinkIntervalRef;
this.el.fadeIn(interval).delay(interval).fadeOut(interval);
}
Обратите внимание, что она не тестировалась, но, по крайней мере, даст вам направление.
Обновление: вот рабочий пример, но требует некоторой отладки и корректировки временных интервалов:
Indicator = function(str) {
this.el= $(str);
this.fadeDuration = 100;
this.blinkIntervalRef = null;
this.doBlink = function(){
//this is just shortcut, not to make horizontal scroll
var interval = this.blinkIntervalRef;
this.el.fadeIn(interval).delay(interval).fadeOut(interval);
}
this.blink = function(){
var ctx = this;
this.blinkIntervalRef = setInterval(function(){ctx.doBlink();},this.fadeDuration*4);
}
this.stop = function() {clearInterval(this.blinkIntervalRef);}
}
function start(){
indicator = new Indicator('#indicator p');
indicator.blink();
}
$(document).ready(function(){start();});