Maison > interface Web > tutoriel CSS > Pourquoi ma fonction « animer » fonctionne-t-elle dans IE mais pas dans Chrome : un problème d'observation JavaScript ?

Pourquoi ma fonction « animer » fonctionne-t-elle dans IE mais pas dans Chrome : un problème d'observation JavaScript ?

DDD
Libérer: 2024-12-06 01:36:13
original
579 Les gens l'ont consulté
<p>Why Does My `animate` Function Work in IE But Not Chrome: A JavaScript Shadowing Issue?

La fonction JS « Animate » échoue dans Chrome mais réussit dans IE : résolution du problème d'observation

Description du problème

<p>Un événement onClick avec une fonction en ligne nommé « animer », conçu pour modifier le style d'un élément, échoue dans Chrome mais fonctionne comme prévu dans IE. Le code invoqué dans la fonction 'animate' vise à modifier la position et la couleur de l'élément à l'aide de JavaScript.

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

Solution et explication

<p>Le problème réside dans la portée de JavaScript chaîne et mécanisme d'ombrage. Lorsque l'attribut du gestionnaire d'événements en ligne (par exemple, onclick) est utilisé, la fonction globale « animer » est obscurcie par la méthode « Element.prototype.animate » récemment introduite, qui découle de l'API Web Animations.

window.animate // global function

Element.prototype.animate // element's own method
Copier après la connexion
<p>Selon les spécifications DOM, l'environnement global du gestionnaire d'événements masque la portée de l'élément lors de la gestion des événements. Ainsi, la méthode 'animer' de l'élément prime sur la fonction globale 'animer'.

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).
Copier après la connexion
<p>Pour remédier à cela, on peut employer plusieurs approches :

  1. Renommer l'élément fonction globale :
function animate__() {
  var div = document.getElementById('demo');
  div.style.left = "200px";
  div.style.color = "red";
}
Copier après la connexion
  1. Lier la fonction globale à la cible élément :
document.getElementById('demo').addEventListener('click', animate.bind(document.getElementById('demo')));
Copier après la connexion

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal