Kısa cevap:
Yaptım. Dışarıdaki tüm küçük insanlar için dinamik kullanım için bir fonksiyon yazdım ...
Sayfada görüntülenen çalışma örneği
Konsolda çalışma örneği günlüğü
Uzun cevap:
... Hala yaptı.
Bunu yapmak biraz zaman aldı, çünkü bir psuedo öğesi gerçekten sayfada değil. Yukarıdaki yanıtlardan bazıları BAZI senaryolarda çalışırken, TÜMÜ hem dinamik hem de bir öğenin hem boyut hem de konumda beklenmedik olduğu bir senaryoda (ana öğenin bir bölümünü kaplayan mutlak konumlandırılmış öğeler gibi) çalışmaz. Benimki değil.
Kullanımı:
//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;
});
Nasıl çalışır:
Üst öğenin yükseklik, genişlik, üst ve sol konumlarını (pencerenin kenarından uzaktaki konuma göre) yakalar ve (ana kabın kenarına bağlı olarak) yükseklik, genişlik, üst ve sol konumları yakalar ) ve psuedo öğesinin ekranda nerede olduğunu belirlemek için bu değerleri karşılaştırır.
Daha sonra farenin yerini karşılaştırır. Fare yeni oluşturulan değişken aralığında olduğu sürece true değerini döndürür.
Not:
Ana öğenin RELATIVE olmasını sağlamak akıllıca olacaktır. Mutlak konumlandırılmış bir psuedo öğeniz varsa, bu işlev yalnızca ebeveynin boyutlarına göre konumlandırılırsa çalışır (bu nedenle ebeveyn göreli olmalıdır ... belki yapışkan veya sabit de çalışır ... Bilmiyorum).
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
};
}
Destek:
Bilmiyorum .... yani aptal gibi görünüyor ve bazen hesaplanan bir değer olarak otomatik dönmek seviyor. ÖLÇÜLER CSS'DE AYARLANMIŞSA, TÜM TARAYICILARDA ÇALIŞMAK İSTİYOR. Yani ... boyunuzu ve genişliğinizi psuedo elemanlarınıza ayarlayın ve sadece üst ve sola hareket ettirin. Üzerinde çalışmamanız iyi olan şeylerde kullanmanızı öneririm. Bir animasyon falan gibi. Chrome her zamanki gibi çalışıyor.