J'essaie de capturer les événements de souris sur un élément avec un autre élément absolument positionné au-dessus.
À l'heure actuelle, les événements sur l'élément absolument positionné le touchent et remontent jusqu'à son parent, mais je veux qu'il soit "transparent" à ces événements de souris et les transmette à tout ce qui se trouve derrière. Comment dois-je mettre cela en œuvre?
pointer-events
existait! Je pourrais changer la réponse acceptée à celle-ci à un moment donné.pointer-events
n'est toujours pas super génial , mais il s'améliore. Pour une option plus compatible, allez avec la réponse de @ JedSchmidt.Si tout ce dont vous avez besoin est de la souris, vous pouvez peut-être vous contenter de la
document.elementFromPoint
méthode, en:x
ety
de l'événement à ladocument.elementFromPoint
méthode pour obtenir l'élément en dessous, puisla source
Aussi bon à savoir ... Les
événements de pointeur peuvent être désactivés pour un élément parent (probablement transparent div) et être activés pour les éléments enfants. Cela est utile si vous travaillez avec plusieurs couches div qui se chevauchent, où vous souhaitez pouvoir cliquer sur les éléments enfants de n'importe quelle couche. Pour cela, tous les divs parentaux obtiennent
pointer-events: none
et les enfants click obtiennent des événements de pointeur réactivés parpointer-events: all
la source
pointer-events:none
et l'abandon imminent d'avoir des nœuds enfants affectés, vous sauvez la journée :).parent * { pointer-events:all; }
pour les enfants?La raison pour laquelle vous ne recevez pas l'événement est que l'élément positionné de manière absolue n'est pas un enfant de l'élément que vous souhaitez "cliquer" (div bleu). La façon la plus propre à laquelle je peux penser est de mettre l'élément absolu en tant qu'enfant de celui sur lequel vous voulez cliquer, mais je suppose que vous ne pouvez pas faire cela ou que vous n'auriez pas posté cette question ici :)
Une autre option serait d'enregistrer un gestionnaire d'événements de clic pour l'élément absolu et d'appeler le gestionnaire de clics pour le div bleu, les faisant clignoter tous les deux.
En raison de la façon dont les événements se propagent dans le DOM, je ne suis pas sûr qu'il existe une réponse plus simple pour vous, mais je suis très curieux de savoir si quelqu'un d'autre a des astuces que je ne connais pas!
la source
Il existe une version javascript disponible qui redirige manuellement les événements d'une div à l'autre.
Je l'ai nettoyé et transformé en un plugin jQuery.
Voici le référentiel Github: https://github.com/BaronVonSmeaton/jquery.forwardevents
Malheureusement, l'objectif pour lequel je l'utilisais - superposer un masque sur Google Maps n'a pas capturé les événements de clic et de glisser, et le curseur de la souris ne change pas, ce qui dégrade suffisamment l'expérience utilisateur pour que je décide de masquer le masque sous IE et Opera - les deux navigateurs qui ne prennent pas en charge les événements de pointeur.
la source
Si vous connaissez les éléments qui nécessitent des événements de souris et si votre superposition est transparente, vous pouvez simplement définir leur index z à quelque chose de plus élevé que la superposition. Tous les événements devraient bien sûr fonctionner dans ce cas sur tous les navigateurs.
la source