Réponse courte:
Je l'ai fait. J'ai écrit une fonction pour une utilisation dynamique pour tous les petits gens là-bas ...
Exemple de travail qui s'affiche sur la page
Exemple de travail de connexion à la console
Longue réponse:
... Je l'ai toujours fait.
Il m'a fallu un certain temps pour le faire, car un élément pseudo n'est pas vraiment sur la page. Bien que certaines des réponses ci-dessus fonctionnent dans CERTAINS scénarios, elles ne parviennent PAS toutes à la fois à être dynamiques et à fonctionner dans un scénario dans lequel un élément est à la fois inattendu en taille et en position (comme des éléments positionnés en absolu superposant une partie de l'élément parent). La mienne non.
Usage:
//some element selector and a click event...plain js works here too
$("div").click(function() {
//returns an object {before: true/false, after: true/false}
psuedoClick(this);
//returns true/false
psuedoClick(this).before;
//returns true/false
psuedoClick(this).after;
});
Comment ça fonctionne:
Il saisit la hauteur, la largeur, le haut et la gauche (en fonction de la position éloignée du bord de la fenêtre) de l'élément parent et saisit la hauteur, la largeur, le haut et la gauche (en fonction du bord du conteneur parent) ) et compare ces valeurs pour déterminer où se trouve l'élément pseudo à l'écran.
Il compare ensuite où se trouve la souris. Tant que la souris se trouve dans la plage de variables nouvellement créée, elle renvoie true.
Remarque:
Il est judicieux de positionner l'élément parent RELATIVE. Si vous avez un élément psuedo positionné en absolu, cette fonction ne fonctionnera que si elle est positionnée en fonction des dimensions du parent (donc le parent doit être relatif ... peut-être collant ou fixe fonctionnerait aussi ... je ne sais pas).
Code:
function psuedoClick(parentElem) {
var beforeClicked,
afterClicked;
var parentLeft = parseInt(parentElem.getBoundingClientRect().left, 10),
parentTop = parseInt(parentElem.getBoundingClientRect().top, 10);
var parentWidth = parseInt(window.getComputedStyle(parentElem).width, 10),
parentHeight = parseInt(window.getComputedStyle(parentElem).height, 10);
var before = window.getComputedStyle(parentElem, ':before');
var beforeStart = parentLeft + (parseInt(before.getPropertyValue("left"), 10)),
beforeEnd = beforeStart + parseInt(before.width, 10);
var beforeYStart = parentTop + (parseInt(before.getPropertyValue("top"), 10)),
beforeYEnd = beforeYStart + parseInt(before.height, 10);
var after = window.getComputedStyle(parentElem, ':after');
var afterStart = parentLeft + (parseInt(after.getPropertyValue("left"), 10)),
afterEnd = afterStart + parseInt(after.width, 10);
var afterYStart = parentTop + (parseInt(after.getPropertyValue("top"), 10)),
afterYEnd = afterYStart + parseInt(after.height, 10);
var mouseX = event.clientX,
mouseY = event.clientY;
beforeClicked = (mouseX >= beforeStart && mouseX <= beforeEnd && mouseY >= beforeYStart && mouseY <= beforeYEnd ? true : false);
afterClicked = (mouseX >= afterStart && mouseX <= afterEnd && mouseY >= afterYStart && mouseY <= afterYEnd ? true : false);
return {
"before" : beforeClicked,
"after" : afterClicked
};
}
Soutien:
Je ne sais pas .... on dirait que c'est stupide et aime parfois retourner auto comme valeur calculée parfois. IL SEMBLE BIEN FONCTIONNER DANS TOUS LES NAVIGATEURS SI LES DIMENSIONS SONT RÉGLÉES EN CSS. Alors ... réglez votre hauteur et votre largeur sur vos éléments de pédale et déplacez-les uniquement en haut et à gauche. Je recommande de l'utiliser sur des choses qui ne vous conviennent pas. Comme une animation ou quelque chose. Chrome fonctionne ... comme d'habitude.