Heim >Web-Frontend >CSS-Tutorial >Warum funktioniert meine „Animate'-Funktion im IE, aber nicht in Chrome: Ein JavaScript-Shadowing-Problem?

Warum funktioniert meine „Animate'-Funktion im IE, aber nicht in Chrome: Ein JavaScript-Shadowing-Problem?

DDD
DDDOriginal
2024-12-06 01:36:13577Durchsuche
<p>Why Does My `animate` Function Work in IE But Not Chrome: A JavaScript Shadowing Issue?

JS-Funktion „Animate“ schlägt in Chrome fehl, ist aber im IE erfolgreich: Behebung des Shadowing-Problems

Problembeschreibung

<p>Ein onClick-Ereignis mit einer Inline-Funktion namens „animate“, das den Stil eines Elements ändern soll, schlägt in Chrome fehl, funktioniert aber im IE wie vorgesehen. Der in der Funktion „Animieren“ aufgerufene Code zielt darauf ab, die Position und Farbe des Elements mithilfe von JavaScript zu ändern.

function animate() {
  var div = document.getElementById('demo');
  div.style.left = "200px";
  div.style.color = "red";
}
#demo {
  position: absolute;
}
<p>

Lösung und Erklärung

<p>Das Problem liegt im Anwendungsbereich von JavaScript Ketten- und Abschattungsmechanismus. Wenn das Inline-Event-Handler-Attribut (z. B. onclick) verwendet wird, wird die globale Funktion „animate“ durch die kürzlich eingeführte Methode „Element.prototype.animate“ verdeckt, die aus der Web Animations API stammt.

window.animate // global function

Element.prototype.animate // element's own method
<p>Gemäß den DOM-Spezifikationen beschattet die globale Event-Handler-Umgebung den Gültigkeitsbereich des Elements während der Event-Handhabung. Somit hat die „Animieren“-Methode des Elements Vorrang vor der globalen „Animieren“-Funktion.

10. Let the current event handler value be the result of the following steps:
    ...
    4. Let the target environment be the lexical environment scope.
    ...
    6. If the element is non-null, then
        a. Let the target environment be the result of NewObjectEnvironment(the element, the target environment).
<p>Um dies zu beheben, kann man mehrere Ansätze anwenden:

  1. Benennen Sie das um globale Funktion:
function animate__() {
  var div = document.getElementById('demo');
  div.style.left = "200px";
  div.style.color = "red";
}
  1. Binden Sie die globale Funktion an das Ziel Element:
document.getElementById('demo').addEventListener('click', animate.bind(document.getElementById('demo')));

Das obige ist der detaillierte Inhalt vonWarum funktioniert meine „Animate'-Funktion im IE, aber nicht in Chrome: Ein JavaScript-Shadowing-Problem?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn