简短答案:
我做的。我写了一个函数,供所有小家伙动态使用。
显示在页面上的工作示例
工作示例记录到控制台
长答案:
...还是做到了。
我花了一些时间来做,因为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元素在屏幕上的位置。
然后比较鼠标的位置。只要鼠标在新创建的变量范围内,它就会返回true。
注意:
使父元素相对定位是明智的。如果您有一个绝对定位的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
};
}
支持:
我不知道....看起来像是愚蠢的,有时喜欢将auto作为计算值返回。如果在CSS中设置了尺寸,则它在所有浏览器中都能正常工作。所以...在psuedo元素上设置高度和宽度,并只在顶部和左侧移动它们。我建议您在无法解决的问题上使用它。像动画之类的。Chrome可以正常运作。