hoi

Ik voor volgende code uit.
document.getElementsByTagName("Body")[0].style.background="green";
newHS = prompt("Wat is je naam?", "JanR");

Het scherm wordt echter niet onmiddellijk groen zoals opgegeven maar wacht tot de gebruiker geantwoord geeft.

Waarom en hoe los ik dit op?

Jan

[size=xsmall]Toevoeging op 09/02/2021 11:46:18:[/size]

Zowel onder chrome als de nieuwe edge
werkend voorbeeld: https://www.janr.be/games/schuifpuzzel/
Je veranderd de background color en direct daarna roep je een prompt op. Prompt werkt blokkerend, dat wil zeggen dat het alle uitvoer blokkeert, inclusief het opnieuw tekenen van de pagina.
Hierdoor heeft de browser niet genoeg tijd om de achtergrondkleur te updaten en opnieuw te tekenen waardoor je het resultaat pas ziet als de prompt is gesloten.

Je kan de prompt iets vertragen door het zo te doen:

document.getElementsByTagName("Body")[0].style.background="green";
setTimeout(function() {
    newHS = prompt("Wat is je naam?", "JanR");
}, 1);

Hiermee vertraag de prompt() 1 milliseconde, dat zou precies genoeg tijd moeten zijn om de achtergrond opnieuw te tekenen.

Nu ben ik niet zo gecharmeerd van overal maar een kleine timeout op zetten maar ik kan even niets bedenken wat met prompt() werkt en het opnieuw tekenen op een nettere manier afvangt in "vanilla" javascript.

Editje: Je moet hiermee ook rekening houden met de scope van de variabele newHS, die bestaat alleen binnen de anonieme functie in setTimeout. Een van de redenen waarom ik dit geen mooie oplossing vind.
Great!
thanks.

In de praktijk staan er nog een paar commando's maar du zullen dus ook te snel zijn:)

Jan
Is document.getElementsByTagName("Body")[0] niet hetzelfde als document.body ?
Dat klopt inderdaad en zou het script wat leesbaarder maken.

Reageren