Certains développeurs ont rencontré un problème en essayant de simuler la fonctionnalité de survol de la souris en mode pur JavaScript ne déclenche pas la déclaration de survol CSS, malgré le déclenchement de l'écouteur de survol de la souris. Cet article cherche à relever ce défi et à explorer des solutions potentielles.
Au cœur du problème se trouve le concept de niveaux de confiance des événements dans le navigateur. Les événements déclenchés par une interaction de l'utilisateur ou des modifications apportées au DOM sont considérés comme des événements approuvés et disposent de certains privilèges. En revanche, les événements générés par le code JavaScript via les méthodes DocumentEvent.createEvent ou EventTarget.dispatchEvent sont considérés comme des événements non fiables.
L'absence de styles de déclenchement de « survol » pour les événements non fiables est dû à des restrictions de sécurité. Les navigateurs limitent les actions par défaut déclenchées par des événements non fiables, à l'exception de celles comme click ou DOMActivate. Il s'agit d'une mesure délibérée visant à empêcher un code malveillant de simuler les interactions des utilisateurs et de compromettre potentiellement la sécurité.
Pour simuler les effets de survol de la souris, la solution réside dans l'ajout et la suppression manuels de CSS classes lorsque les événements de survol et de sortie de souris sont détectés. Cette approche déclenche efficacement la déclaration CSS ":hover" sans s'appuyer sur des événements non fiables. Voici un exemple d'implémentation :
// Simulate mouseover effect element.addEventListener("mouseover", () => { element.classList.add("hover"); }); // Simulate mouseout effect element.addEventListener("mouseout", () => { element.classList.remove("hover"); });
En implémentant cette solution, vous pouvez simuler l'événement de survol de la souris et déclencher les styles de survol CSS souhaités sans violer les restrictions de sécurité du navigateur.
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!