短い答え:
やったよ。私はそこにいるすべての小さな人々のための動的使用のための関数を書きました...
ページに表示される実例
コンソールへのロギングの実例
長い答え:
...それでもやった。
疑似要素は実際にはページ上にないため、それを行うには少し時間がかかりました。上記の回答の一部は一部のシナリオで機能しますが、すべてが動的でなく、要素のサイズと位置が両方とも予期しないシナリオ(親要素の一部を覆う絶対配置要素など)で機能しません。私はしません。
使用法:
//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;
});
使い方:
親要素の高さ、幅、上、左の位置(ウィンドウの端から離れた位置に基づく)を取得し、高さ、幅、上、左の位置(親コンテナの端に基づく)を取得します。 )、それらの値を比較して、疑似要素が画面上のどこにあるかを判断します。
次に、マウスの位置を比較します。マウスが新しく作成された変数の範囲内にある限り、trueを返します。
注意:
親要素をRELATIVEに配置することをお勧めします。絶対配置された疑似要素がある場合、この関数は、親の寸法に基づいて配置されている場合にのみ機能します(したがって、親は相対的である必要があります...スティッキーまたは固定も機能する可能性があります...わかりません)。
コード:
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で設定されている場合、すべてのブラウザでうまく機能するようです。だから...あなたの高さと幅を疑似要素に設定し、上と左だけでそれらを動かしてください。動作しないことで大丈夫なものに使用することをお勧めします。アニメーションのようなものです。Chromeは正常に動作します。