ユーザーがウェブサイトのどこかをクリックすると、マウスのxとyの位置を登録して印刷します。マウスのxとyの位置を画面に表示しようとしています - 0,
問題:毎回0、0の位置が印刷されます。この機能は、クリックイベントハンドラ
function onClickDo(event) {
var el = event.CurrentTarget;
var posOb = getPosition(el);
for (var key in posOb) {
console.log(key);
}
alert(posOb.x + " x pos");
alert(posOb.y+ " y pos");
alert(posOb.a+ " random string");
}
のonload機能
window.onload = function() {
document.onclick = onClickDo(event);
};
上のxとy
// get the position of click
function getPosition(el) {
var xPosition = 0;
var yPosition = 0;
while (el) {
if (el.tagName == "BODY") {
// deal with browser quirks with body/window/document and page scroll
var xScrollPos = el.scrollLeft || document.documentElement.scrollLeft;
var yScrollPos = el.scrollTop || document.documentElement.scrollTop;
xPosition += (el.offsetLeft - xScrollPos + el.clientLeft);
yPosition += (el.offsetTop - yScrollPos + el.clientTop);
} else {
xPosition += (el.offsetLeft - el.scrollLeft + el.clientLeft);
yPosition += (el.offsetTop - el.scrollTop + el.clientTop);
}
el = el.offsetParent;
}
return {
x: xPosition,
y: yPosition,
a: "hahah",
};
}
の位置を取得します
ANSWER
// Set up event handlers according to modern standards
window.addEventListener("load", function(){
document.addEventListener("click", handleClick);
});
function handleClick(event) {
var xPosition = 0;
var yPosition = 0;
var el = event.currentTarget; <----------------------- targeting the element not working
while (el) {
if (el.nodeName == "BODY") {
// deal with browser quirks with body/window/document and page scroll
var xScrollPos = el.scrollLeft || document.documentElement.scrollLeft;
var yScrollPos = el.scrollTop || document.documentElement.scrollTop;
xPosition += (el.offsetLeft - xScrollPos + el.clientLeft);
yPosition += (el.offsetTop - yScrollPos + el.clientTop);
} else {
xPosition += (el.offsetLeft - el.scrollLeft + el.clientLeft);
yPosition += (el.offsetTop - el.scrollTop + el.clientTop);
}
el = el.offsetParent;
}
// return {
// x: xPosition,
// y: yPosition,
// a: "hahah",
// };
alert(xPosition + " x pos" + " and " + yPosition + " y pos");
}
に基づく0
UPDATE私は、しかし、私はNaN
エラーを取得しています。.. event.currentTarget
を使用してel
を定義する必要がありました。ちょっとわからない。助けてください!
変更:document.onclick = onClickDo(event);
へ:document.onclick = onClickDo;
あなたはイベント処理関数にイベントを渡さない
「onClicDoではなく、クリックイベントを待っているの直後に呼び出されている」 - 私はそれが問題であることを理解。解決策は何ですか? – Shaz
@Shaz私はすでにあなたに解決策を与え、私が指定したコードを変更します。 –
だから私はevent.offsetXは親との相対的なものだと私に正しいコードを与えません。 handlerClick関数で私は以下の変更を行いました。その答えの更新されたコードを見てください。助けて! – Shaz