Hola a todos y gracias por de antemano por atenderme.
Estoy escribiendo un sencillo código JavaScript para mostrar texto con un efecto de
movimiento. Para ello he creado una clase llamada Text de la siguiente forma:
//constructor
function Text (html_object, speed, wait_paragrah, repeat, wait_repeat){
//atributos privados
this.text = new Array();
this.iparagrah = 0; //Paragrah index
this.ichar = -1; //Char index
this.paragrahShowed = '';
this.timesShowed = 0; //Number of times text showed
//atributos públicos
this.htmlObject = html_object;
this.speed = speed; //Speed char show
this.waitParagrah = wait_paragrah; //Wait until next paragrah
if (repeat > -1){
this.repeat = repeat; //Repeat text n times; 0 value, repeat always
}
this.waitRepeat = wait_repeat; //Wait until repeat text
//métodos
this.Reset = Reset;
this.Insert = Insert;
this.Show = Show;
}
Como podeis ver la clase define 3 métodos, entre ellos y que más me interesa Show, que
muestra el texto en pantalla.
El código que estoy desarrollando para dicha función se encuentra en este punto...
function Show (){
var paragrah_temp = '';
while (this.iparagrah < this.text.length){
if (this.ichar < (this.text[this.iparagrah].length - 1)){
this.ichar++;
paragrah_temp = this.text[this.iparagrah];
paragrah_temp = paragrah_temp.split('');
this.paragrahShowed = this.paragrahShowed + paragrah_temp[this.ichar];
document.getElementById(this.htmlObject).innerHTML =
this.paragrahShowed;
setTimeout("this.Show()",this.speed);
return;
}
this.iparagrah++;
this.ichar = -1;
this.paragrahShowed = '';
setTimeout("this.Show();",this.waitParagrah);
this.Show();
return;
}
this.iparagrah = 0;
this.ichar = -1;
this.paragrahShowed = '';
if (this.repeat > 0){
this.timesShowed++;
if (this.timesShowed < this.repeat){
setTimeout("this.Show();",this.waitRepeat);
return;
}
} else{
setTimeout("this.Show();",this.waitRepeat);
return;
}
}
Mi problema es que el paso del método this.Show() como argumento de setTimeout no
funciona. He probado mil y una formas de hacerlo, como por ejemplo:
1. Definir una función nada() sin instrucciones y hacer lo siguiente.
setTimeout("nada();",this.speed);
this.Show();
return;
La función nada() tiene sentido como retardo en la ejecución de las posteriores
instrucciones.
2. Disasociar el objeto de la llamada al objeto
setTimeout("show(this);",this.speed);
return;
function show(object){
object.Show();
}
3. He probado también con distintas formas en la sintáxis de llamada
setTimeout("+this.Show();",this.speed);
Agradecería sinceramente cualquier tipo de ayuda o comentario.
Gracias a todos