Jawaban singkat:
Saya melakukannya. Saya menulis fungsi untuk penggunaan dinamis untuk semua orang kecil di luar sana ...
Contoh kerja yang ditampilkan pada halaman
Bekerja contoh masuk ke konsol
Jawaban panjang:
... Masih melakukannya.
Butuh beberapa saat untuk melakukannya, karena elemen psuedo tidak benar-benar ada di halaman. Sementara beberapa jawaban di atas berfungsi dalam skenario BEBERAPA, mereka SEMUA gagal menjadi dinamis dan bekerja dalam skenario di mana elemen keduanya tidak terduga dalam ukuran dan posisi (seperti elemen diposisikan mutlak overlay bagian dari elemen induk). Milik saya tidak.
Pemakaian:
//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;
});
Bagaimana itu bekerja:
Ia meraih posisi tinggi, lebar, atas, dan kiri (berdasarkan posisi yang jauh dari tepi jendela) elemen induk dan meraih posisi tinggi, lebar, atas, dan kiri (berdasarkan tepi wadah induk ) dan membandingkan nilai-nilai tersebut untuk menentukan di mana elemen psuedo berada di layar.
Kemudian membandingkan di mana mouse berada. Selama mouse berada dalam rentang variabel yang baru dibuat maka ia mengembalikan true.
catatan:
Adalah bijaksana untuk membuat elemen induk RELATIF diposisikan. Jika Anda memiliki elemen psuedo yang benar-benar diposisikan, fungsi ini hanya akan berfungsi jika diposisikan berdasarkan dimensi induknya (sehingga induknya harus relatif ... mungkin lengket atau tetap akan berfungsi juga .... Saya tidak tahu).
Kode:
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
};
}
Dukung:
Saya tidak tahu .... sepertinya itu bodoh dan suka mengembalikan otomatis sebagai nilai yang dihitung terkadang. TAMPAKNYA BEKERJA DENGAN BAIK DALAM SEMUA BROWSER JIKA DIMENSI DIRANCANG DALAM CSS. Jadi ... atur tinggi dan lebar Anda pada elemen psuedo Anda dan hanya gerakkan dengan atas dan kiri. Saya sarankan menggunakannya pada hal-hal yang Anda tidak masalah dengan itu tidak berfungsi. Seperti animasi atau semacamnya. Chrome berfungsi ... seperti biasa.