gpt4 book ai didi

javascript - 事件和光标位置

转载 作者:可可西里 更新时间:2023-11-01 13:17:40 24 4
gpt4 key购买 nike

我想在红色 div 上的光标和鼠标按钮按下时显示鼠标坐标。

问题是当我在 div 外释放按钮并将光标返回到 div 时,onmousemove 事件没有被删除。

注意:我不想使用任何像 jQuery 这样的库。

        <script type="text/javascript">

window.onload = function(){

document.getElementById("thediv").onmousedown = AttachEvent;

}
function GetPos(e){
document.getElementById('X').value = (window.Event) ? e.pageX : event.clientX + (document.documentElement.scrollLeft ? document.documentElement.scrollLeft : document.body.scrollLeft);
document.getElementById('Y').value = (window.Event) ? e.pageY : event.clientY + (document.documentElement.scrollTop ? document.documentElement.scrollTop : document.body.scrollTop);

}

function UnaatachEvent(e){
document.getElementById("thediv").onmousemove = null;
document.getElementById("thediv").onmouseup = null;
}

function AttachEvent(e){
document.getElementById("thediv").onmousemove = GetPos;
document.getElementById("thediv").onmouseup = UnaatachEvent;
}
</script>
</head>
<body>
<input type="text" id="X" size="3">X-position
<br/>
<br/>
<input type="text" id="Y" size="3">Y-position
<div style="width:100px;height:100px;background-color:red;margin:auto;" id="thediv">
</div>
</body>

更新:
使用 jQuery 非常简单:(仅在 Firefox 中测试) link text

$(document).ready(function(){

$('#thediv').mousedown(attachEvent);
});
function attachEvent(e){
$('#thediv').mousemove(getPos).mouseup(unattachEvent);

return false;
}

function getPos(e){

document.getElementById('X').value = e.pageX;
document.getElementById('Y').value = e.pageY;
return false;
}

function unattachEvent(e){
$('#thediv').unbind("mousemove", getPos).unbind("mouseup", unattachEvent);

请注意主要场景:

  1. 如果按钮在正方形外被点击,并在按住时移动到 suqre - 不要更新位置。
  2. 如果按钮在正方形内被点击,并在按住时向外移动 - 停止更新,将其带回(不释放按钮)继续更新

换句话说,初始的 mousedown 应该只在正方形上才能开始更新。

我想用 javascript 做同样的事情。

最佳答案

您的代码可以更好地写成 ( Working Demo )

var div = document.getElementById("thediv");
div.onmousedown = attachEvent;

// if mouse released, stop watching mouseover
document.onmouseup = function () {
div.onmouseover = null;
}

function attachEvent() {
this.onmousemove = getPos;
this.onmouseout = unattachEvent;
this.onmouseup = unattachEvent;
return false; // prevent Firefox "drag behavior"
}

function unattachEvent() {
this.onmousemove = null;
this.onmouseup = null;
this.onmouseout = null;
// wait for the mouse to come back
this.onmouseover = attachEvent;
}

function getPos(e) {
e = e || window.event;
var docEl = document.documentElement;
var scrollLeft = docEl.scrollLeft || document.body.scrollLeft;
var scrollTop = docEl.scrollTop || document.body.scrollTop;
document.getElementById('X').value = e.pageX || (e.clientX + scrollLeft);
document.getElementById('Y').value = e.pageY || (e.clientY + scrollTop);
}​

关于javascript - 事件和光标位置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4112847/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com