Ich bin neu in Javascript, so dass ich Grundkenntnisse fehlt, aber ich verstehe nicht, warum ein Problem in diesem Code ist.setInterval wird nur einmal ausgeführt, wenn versucht wird, eine Funktion auszuführen, die querySelectorAll-Array durchläuft
Ich versuche, einen "Konsolen-Typ-Effekt" zu erstellen, der im Grunde bedeutet, dass der ausgewählte Text so aussieht, als wäre er in Echtzeit eingegeben, nachdem die Seite geladen wurde. Ich weiß, dass es ähnliche Effekte gibt, aber ich möchte dies in Vanille JS (keine Frameworks) tun.
Was ich bisher getan (Pseudocode):
- Get Elemente mit .console-Effekt Klasse Ende speichern sie in „Elementliste“
- Schleife durch die Elemente und einen Cursor auf dem hinzufügen Ende des Textes haben sie. Machen
- (hier i fehlgeschlagen :() die Cursor
blinkt, während ich, dass gefunden Debuggen in nach dem Cursor Schleifen (um sie zu blinken) einmal, die Methode „elem.style.opacity“, sagt dass das Element hat es ist "undefined" ...
document.body.onload = function() {
function addCursor(element) {
// Create a Span with the cursor character and give it an class of .cursor
var newSpan = document.createElement('span'),
newSpanText = document.createTextNode('|');
newSpan.appendChild(newSpanText);
newSpan.className = 'cursor';
//Add newSpan to the element var(passed trough the function)
element.appendChild(newSpan);
}
function animateCursor() {
var cursors = document.querySelectorAll('.cursor');
for (var i = 0; i < cursors.length; i++) {
cursors[i].style.opacity = '0';
setTimeout(function() {
cursors[i].style.opacity = '1';
}, 500);
}
}
setInterval('animateCursor()', 1000);
var elementsList = document.querySelectorAll('.console-effect');
for (var i = 0; i < elementsList.length ; i++) {
addCursor(elementsList[i]);
}
};
Dies ist der klassische 'closure-in-Schleife' Fall. [Erstellen von Schließungen in Schleifen: Ein häufiger Fehler] (https://developer.mozilla.org/en-US/docs/Web/JavaScript/Closures#Creating_closures_in_loops_A_common_mistake) –