javascript - Mousemove事件错误的目标javascript
问题描述
在什么情况下可以mousemove
给出不正确的目标?我有两个元素并向event.target
我显示一个 div,而实际上鼠标在另一个上。
这是代码。
var o = document.getElementById('container');
var inner = document.getElementById('inner');
var ox = 100;
var oy = 100;
function onMouseDown(event) {
if (event.stopPropagation) event.stopPropagation();
if (event.preventDefault) event.preventDefault();
event.cancelBubble = true;
event.returnValue = false;
var size = {x: o.offsetWidth, y: o.offsetHeight};
var curX = event.pageX;
var curY = event.pageY;
var previousInside = event.target === inner;
function onMouseMove(event) {
var x = event.pageX;
var y = event.pageY;
var dx = x - curX;
var dy = y - curY;
var p1 = {x: ox, y: oy};
var p2 = {x: ox + 50, y: oy + 50};
p1.x += dx;
p2.x += dx;
p1.y += dy;
p2.y += dy;
var currentInside = event.target === inner;
console.log('Was '+ (previousInside? 'inside': 'outside'), 'Now ' + (currentInside?'inside': 'outside'))
if (p1.x < 40 || p2.x > size.x - 40 || p1.y < 40 || p2.y > size.y - 40) {
if (currentInside) {
curX = x;
curY = y;
}
previousInside = currentInside;
return;
} else {
if (currentInside && !previousInside) {
curX = x;
curY = y;
previousInside = currentInside;
return;
}
}
previousInside = currentInside;
curX = x;
curY = y;
ox = p1.x;
oy = p1.y;
inner.style.top = oy +'px';
inner.style.left = ox+'px';
return false
}
o.addEventListener("mousemove", onMouseMove);
o.addEventListener("mouseup", function () {
o.removeEventListener('mousemove', onMouseMove);
});
}
o.addEventListener("mousedown", onMouseDown);
<div id="container" style="position: relative; width: 50%; height: 250px; background-color: yellow;">
<div id="inner" style="position:absolute; width: 50px; height:50px; background-color: red; top:100px; left: 100px">
</div>
</div>
要查看奇怪的行为,请将鼠标放在红色方块上并拖动它直到它停止移动。再往上拖一点,这样你就离红色方块足够远了。现在从广场向右拖动。现在向下拖动,当mouseX 等于红色框x 时,控制台将显示Was outside 和Now insinde,而实际上它应该是Was outside 和Now inside。
谢谢你。
解决方案
推荐阅读
- javascript - 基本的 Fancybox/jquery 问题
- php - 组合数组php的问题
- sql - TSQL 错误语句 2
- python - python3中的JPEG解压
- javascript - 使用 material-ui-pickers 时找不到 babel-runtime 模块
- django - Django - 如何使用过滤器在外键中获取对象的值
- sql - SQL Server 代理 - 每个作业执行的唯一 ID
- c# - 将 NLog 消息写入不同的目标
- java - 如何使用 ZipEntry 在 Zip 中添加重复文件
- git - git 如何合并和选择我想要的文件来自哪个分支