Risposta breve:
L'ho fatto. Ho scritto una funzione per l'uso dinamico per tutte le piccole persone là fuori ...
Esempio funzionante che viene visualizzato nella pagina
Esempio di funzionamento registrazione sulla console
Risposta lunga:
... lo ha ancora fatto.
Mi ci è voluto un po 'per farlo, dal momento che un elemento psuedo non è davvero nella pagina. Mentre alcune delle risposte sopra funzionano in ALCUNI scenari, TUTTI non riescono a essere sia dinamici sia in uno scenario in cui un elemento ha dimensioni e posizione sia impreviste (come elementi posizionati assoluti che si sovrappongono a una parte dell'elemento padre). Il mio no.
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;
});
Come funziona:
Afferra le posizioni di altezza, larghezza, superiore e sinistra (in base alla posizione lontana dal bordo della finestra) dell'elemento principale e afferra le posizioni di altezza, larghezza, superiore e sinistra (basate sul bordo del contenitore principale ) e confronta tali valori per determinare dove si trova l'elemento psuedo sullo schermo.
Quindi confronta dove si trova il mouse. Finché il mouse si trova nell'intervallo di variabili appena creato, quindi restituisce true.
Nota:
È consigliabile posizionare l'elemento padre RELATIVO posizionato. Se hai un elemento psuedo posizionato in modo assoluto, questa funzione funzionerà solo se posizionata in base alle dimensioni del genitore (quindi il genitore deve essere relativo ... forse funzionerebbe anche appiccicoso o fisso ... Non lo so).
Codice:
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
};
}
Supporto:
Non lo so .... sembra che sia stupido e gli piace restituire auto come valore calcolato a volte. SEMPRE FUNZIONA BENE IN TUTTI I BROWSER SE LE DIMENSIONI SONO IMPOSTATE NEI CSS. Quindi ... imposta la tua altezza e larghezza sui tuoi elementi psuedo e spostali solo con la parte superiore e sinistra. Vi consiglio di usarlo su cose su cui non state lavorando. Come un'animazione o qualcosa del genere. Chrome funziona ... come al solito.