Resposta curta:
Eu fiz isso. Eu escrevi uma função para uso dinâmico para todas as pessoas pequenas por aí ...
Exemplo de trabalho que é exibido na página
Exemplo de Trabalho Registrando no Console
Resposta longa:
... Ainda fiz isso.
Levei um tempo para fazê-lo, pois um elemento psuedo não está realmente na página. Embora algumas das respostas acima funcionem em ALGUNS cenários, TODAS elas não são dinâmicas e funcionam em um cenário no qual um elemento é inesperado em tamanho e posição (como elementos posicionados absolutos sobrepondo uma parte do elemento pai). O meu não.
Uso:
//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;
});
Como funciona:
Ele agarra as posições de altura, largura, superior e esquerda (com base na posição da borda da janela) do elemento pai e agarra as posições de altura, largura, parte superior e esquerda (com base na borda do contêiner pai ) e compara esses valores para determinar onde o elemento psuedo está na tela.
Em seguida, ele compara onde está o mouse. Enquanto o mouse estiver no intervalo de variáveis recém-criado, ele retornará verdadeiro.
Nota:
É aconselhável colocar o elemento pai em RELATIVO. Se você tiver um elemento psuedo posicionado absoluto, essa função funcionará apenas se for posicionada com base nas dimensões do pai (portanto, o pai deve ser relativo ... talvez fixo ou fixo funcione também ... eu não sei).
Código:
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
};
}
Apoio, suporte:
Eu não sei .... parece, ou seja, é burro e gosta de retornar auto como um valor calculado às vezes. Parece funcionar bem em todos os navegadores, se as dimensões estiverem definidas em CSS. Então ... defina sua altura e largura nos seus elementos psuedo e mova-os apenas com a parte superior e a esquerda. Eu recomendo usá-lo em coisas que você não concorda. Como uma animação ou algo assim. Chrome funciona ... como de costume.