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
Freigeben: 2024-12-06 01:36:13
Original
579 Leute haben es durchsucht
<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";
}
Nach dem Login kopieren
#demo {
  position: absolute;
}
Nach dem Login kopieren
<p>
Nach dem Login kopieren

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
Nach dem Login kopieren
<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).
Nach dem Login kopieren
<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";
}
Nach dem Login kopieren
  1. Binden Sie die globale Funktion an das Ziel Element:
document.getElementById('demo').addEventListener('click', animate.bind(document.getElementById('demo')));
Nach dem Login kopieren

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!

Quelle:php.cn
Erklärung dieser Website
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
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage