Krótka odpowiedź:
Ja to zrobiłem. Napisałem funkcję do dynamicznego użycia dla wszystkich małych ludzi ...
Przykład roboczy, który wyświetla się na stronie
Przykład działającego logowania do konsoli
Długa odpowiedź:
... Nadal to zrobiłem.
Zajęło mi to trochę czasu, ponieważ element psuedo nie jest tak naprawdę na stronie. Chociaż niektóre z powyższych odpowiedzi działają w NIEKTÓRYCH scenariuszach, WSZYSTKIE nie działają zarówno dynamicznie, jak i działają w scenariuszu, w którym element ma zarówno nieoczekiwany rozmiar, jak i pozycję (np. Elementy pozycjonowane bezwzględnie nakładające się na część elementu macierzystego). Mój nie.
Stosowanie:
//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;
});
Jak to działa:
Pobiera wysokość, szerokość, górną i lewą pozycję (w oparciu o pozycję od krawędzi okna) elementu nadrzędnego i chwyta wysokość, szerokość, górną i lewą pozycję (w oparciu o krawędź pojemnika nadrzędnego ) i porównuje te wartości, aby ustalić, gdzie element psuedo znajduje się na ekranie.
Następnie porównuje, gdzie jest mysz. Tak długo, jak mysz znajduje się w nowo utworzonym zakresie zmiennych, zwraca wartość true.
Uwaga:
Rozsądnie jest ustawić element macierzysty RELATIVE. Jeśli masz bezwzględnie pozycjonowany element psuedo, ta funkcja będzie działać tylko wtedy, gdy zostanie ustawiona w oparciu o wymiary rodzica (więc rodzic musi być względny ... może lepki lub naprawiony też by działał .... nie wiem).
Kod:
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
};
}
Wsparcie:
Nie wiem .... wygląda na to, że jest głupi i czasami zwraca wartość auto jako wartość obliczoną. Wydaje się, że działa dobrze we wszystkich przeglądarkach, jeśli wymiary są ustawione w CSS. Więc ... ustaw wysokość i szerokość elementów psuedo i przesuwaj je tylko u góry i po lewej stronie. Zalecam używanie go do rzeczy, na których jesteś w porządku, gdy nie działa. Jak animacja czy coś takiego. Chrome działa ... jak zwykle.