hinzufügen Ich habe eine UL mit einigen li
ist innen. Ich möchte nach dem Zufallsprinzip eine li
auswählen und fügen Sie eine .active
Klasse für 1 Sekunde, dann entfernen Sie .active
Klasse und wählen Sie zufällig eine nächste li
.Wie Klasse zufällig Element in reinem Javascript
Ich versuche, dies ohne die Verwendung von setInterval oder Timeout zu tun, also habe ich versucht mit requestAnimationFrame, obwohl ich denke, meine Logik mit Javascript ist nicht ganz richtig bei der Randomisierung.
Derzeit habe ich es funktioniert, aber es wählt die gleiche li
jedes Mal, wenn die Funktion erneut aufgerufen wird.
<ul>
<li class="light active"></li>
<li class="light"></li>
<li class="light"></li>
<li class="light"></li>
<li class="light"></li>
</ul>
Javascript
(function() {
var lights = document.getElementsByClassName("light");
var random = Math.floor(Math.random() * (lights.length - 1)) + 0;
var randomLight = lights[random];
function repeatOften() {
randomLight.classList += randomLight.classList ? ' active' : ' light';
requestAnimationFrame(repeatOften);
}
requestAnimationFrame(repeatOften);
})();
ist hier ein Stift: https://codepen.io/H0BB5/pen/PJjapX?editors=0010
Vielen Dank im Voraus!
Und warum genau versuchen Sie, 'setInterval()' zu vermeiden? –
Sie starten nie Ihre 'repeatOften()' Funktion. Es wird also nicht immer die 'active' Klasse gesetzt, sondern nur für den ersten Fall. – Adjit
@AlexeySoshin Vermeiden Sie Layout-Thrashing, inkonsistente Verzögerungsintervalle und wenn der Benutzer Tabs ändert, beeinflusst dies das Timing.Von was ich gelesen habe requestAnimationFrame ist der Weg zu gehen und ich versuche, mich selbst zu machen :) – h0bb5