La función setTimeout siempre me da problemas. En este momento tengo una función que es recursiva (se llama a sí misma a través de setTimeout) y cambia la altura de los elementos.La función setTimeout de Javascript no llama a
La función se envía dos argumentos: el elemento que se va a modificar y que los elementos de altura máxima. El propósito de la función es desplegar el elemento, o "deslizar hacia abajo" a un ritmo constante. Soy consciente de que probablemente podría resolver este problema con jQuery, pero estoy probando mi propia función.
function slide_down(element, max_height)
{
if(element.clientHeight < max_height)
{
var factor = 10;
var new_height = (element.clientHeight + factor >= max_height) ? max_height : (element.clientHeight + factor);
element.style.height = new_height + 'px';
var func_call = 'slide_down(' + element + ', ' + max_height + ');';
window.setTimeout(func_call, 10);
}
}
He probado los argumentos cuando se llama inicialmente a la función. max_height está establecido en 20 porque es la altura deseada de los elementos (obtuve este valor de .scrollHeight).
Cuando la función está lista, quiero que se llame solo hasta que max_height sea la altura del elemento. Lo hago con esta llamada setTimeout:
var func_call = 'slide_down(' + element + ', ' + max_height + ');';
window.setTimeout(func_call, 10);
Y no está funcionando. Esto funciona:
var func_call = 'alert(1);';
window.setTimeout(func_call, 10);
También he intentado poner la llamada a la función directamente en la declaración setTimeout, sigue sin funcionar.
Tenga en cuenta que la altura del elemento SI cambia la primera iteración, la función nunca se llama a sí misma. Entonces la variable del elemento está configurada correctamente, y utilicé alert() para mostrar el max_height que también es correcto.
alert(func_call);
Alertas esto:
slide_down([object HTMLParagraphElement], 20);
Gracias. Lo estaba buscando. – HOT