Коротка відповідь:
Я зробив це. Я написав функцію для динамічного використання для всіх маленьких людей там ...
Робочий приклад, який відображається на сторінці
Робочий приклад реєстрації на консолі
Довга відповідь:
... Все-таки це зробили.
Це мені знадобилося деякий час, оскільки елемент psuedo насправді не є на сторінці. Хоча деякі відповіді, наведені вище, працюють у ДЕЯКІХ сценаріях, вони ВСІ не можуть бути як динамічними, так і працювати в сценарії, в якому елемент має як несподівані розміри, так і положення (наприклад, абсолютні позиціоновані елементи, що накладають частину батьківського елемента). Моїх немає.
Використання:
//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;
});
Як це працює:
Він захоплює висоту, ширину, верхню та ліву позиції (залежно від положення від краю вікна) материнського елемента та захоплює висоту, ширину, верхню та ліву позиції (виходячи з краю батьківського контейнера ) і порівнює ці значення, щоб визначити, де на екрані знаходиться елемент psuedo.
Потім він порівнює де миша. Поки миша знаходиться в новоствореному діапазоні змінних, вона повертає істину.
Примітка:
Розумно розмістити батьківський елемент ВІДНОСНО. Якщо у вас абсолютно розташований елемент psuedo, ця функція буде працювати лише в тому випадку, якщо вона розміщена на основі розмірів батьків (тому батько повинен бути відносним ... можливо, липкий або фіксований також буде працювати .... Я не знаю).
Код:
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
};
}
Підтримка:
Я не знаю .... це схоже, тобто є німим і любить повертати авто як обчислене значення іноді. ВИНАЄТЬСЯ, ЩО РОБОТИ ДОБРО ПРАЦІВАТИ ВСІХ БРОЗЕРІВ, ЯКЩО РОЗМІРИ ВСТАНОВЛЕНІ В CSS. Отже ... встановіть свою висоту та ширину на елементах psuedo і перемістіть їх лише вгорі та вліво. Я рекомендую використовувати його для речей, з якими ви добре не працюєте. Як анімація чи щось таке. Chrome працює ... як завжди.