Wie entsteht bei diesem Code der Fehler?
const stars = document.querySelectorAll(".points")
window.addEventListener("mousemove", function(event) {
stars.forEach(function(e) {
let marginLeft = parseFloat(e.style.marginLeft.replace("vw", ""));
let sum = ((event.clientX / window.innerWidth * 100) - marginLeft) / 10 + "vh";
e.style.marginLeft = sum;
})
})
Es gibt mehrere Divs mit der Klasse "points" die, wenn sich der Mauszeiger bewegt, ihre marginLeft ändern sollen. Eigt soll durch die Rechnung so am Ende bei jedem div eine andere veränderte marginLeft herauskommen - Führt man den Code aus wird dann zwar marginLeft verändert aber ist bei allen Elementen gleich hoch, wieso?
2 Antworten
Eigt soll durch die Rechnung so am Ende bei jedem div eine andere veränderte marginLeft herauskommen
Wie kommst du darauf?
Welcher Teil der Rechnung unterscheidet sich denn je Element?
Kann sein, kann aber auch nicht sein.
Den liest du aus einem Style aus, welchen du in der Frage nirgends ansprichst oder herzeigst 🤷🏻♂️ Wenn du überall den selben marginLeft per Style gesetzt hast, dann käme da auch für jedes Element dasselbe raus.
parseFloat(e.style.marginLeft.replace("vw", ""))
Gibt immer denselben Wert zurückgibt, da die
marginLeft
Eigenschaft der Elemente mit der Klasse
points
im CSS-Stil definiert sein muss.
Und zwar inline, weil .style nur das Inline-CSS auslesen kann, nicht aber beispielsweise CSS-Eigenschaften, die mittels einer CSS-Datei oder eines <style>-Tags gesetzt wurde.
Wenn mich nicht täuscht ist das inline gesetzt, marginLeft jedes einzelnen Elements wird vorher über js random generiert und hinzugefügt
const stars = document.querySelectorAll(".points")
window.addEventListener("mousemove", function(event) {
stars.forEach(function(e) {
let offsetLeft = e.offsetLeft;
let sum = ((event.clientX / window.innerWidth * 100) - offsetLeft) / 10 + "vh";
e.style.marginLeft = sum;
})
})
Hier wird die
offsetLeft
Eigenschaft jedes Elements verwendet, um seine tatsächliche linke Position relativ zum Elternelement zu berechnen, anstatt den
marginLeft
Wert zu extrahieren
Die jeweilige marginLeft - oder etwa nicht?