Tengo este código en el que si la opacidad es menor o igual a 0, se supone que el número del mensaje aumenta en 1, pero cuando ejecuto el código, el número del mensaje aumenta en 77 o 152 o 66, etc. ¿Podría ayudarme? ¿yo? Mi código:
//variables var x = 0; var opacity = 0; var messageNumber = 0; var talk1 = ["hello", "welcome to idle ball", "potato"]; var lol = 1; //set opacity to 1 function opacitySet1(speed) { document.getElementById("talk").style.opacity = opacity; opacity += speed; } //set opacity to 0 function opacitySet0(speed) { document.getElementById("talk").style.opacity = opacity; opacity -= speed; } function IntervalManager(flag, animate, time, para1) { if (flag) { var intervalSet = setTimeout(animate, time, para1) } } function IntervalManagerII(flag, animate, time, para1) { if (flag) { var intervalSetII = setTimeout(animate, time, para1) } } //to delay time function nothing() {} function message(startPart) { document.getElementById("talk").innerHTML = messageNumber; if (opacity >= 0 && lol == 0) { setTimeout(nothing, 1); IntervalManagerII(true, opacitySet0, 300, 0.005); IntervalManager(false) } if (opacity <= 1 && lol == 1) { IntervalManager(true, opacitySet1, 300, 0.005); IntervalManagerII(false) } if (opacity <= 0) { lol = 1; IntervalManagerII(false); messageNumber += 1; } //this is the part that is not working if (opacity >= 1) { lol = 0; IntervalManager(false); } }; setInterval(function() { message(0) });Nueva respuesta
Después de discutir en los comentarios, resulta que crees que los temporizadores de JavaScript están bloqueando la ejecución del hilo principal. No funciona de esta manera. Considere el siguiente ejemplo ( 2 se imprime casi instantáneamente y 1 se imprime después de un segundo).
> | setTimeout(function(){console.log(1)}, 1000); | setTimeout(function(){console.log(2)}, 0); < | ... | 2 | 1Lea también este artículo del creador de jQuery.
Dado que su código se basa en una suposición incorrecta, creo que no tiene sentido seguir trabajando en su pregunta.
respuesta antigua
Su temporizador setInterval se ejecuta mucho más rápido que sus temporizadores setTimeout , lo que significa que pone en cola muchos temporizadores setTimeout antes de comenzar a incrementar la opacidad. Durante este tiempo, el mensaje se incrementa y se imprime a la velocidad máxima del intervalo. Después de un par de ms, todos los temporizadores setTimeout comienzan a dispararse uno tras otro casi sin demora entre ellos, y se intercalan con los temporizadores setInterval , lo que conduce a un desorden (casi) impredecible.