【发布时间】:2019-11-19 13:08:14
【问题描述】:
如果有三个 div div1,div2,div3 并排。如果我在 div1 上执行 mousedown,然后如果我将鼠标移动到 div2 上,则 div2 mousemove 将被触发,目标为 div2。但是在移动设备中,如果在 div1 上执行相同的操作,甚至 mousedown(touchstart) 并将鼠标移动到 div2 上,那么 mousemove(touchmove) 就会以目标作为 div1 本身触发。我需要移动 touchmove 事件目标作为 div2?
为什么会有不同的行为以及我们能做什么?
以下是我为解释我的问题所做的示例,
var testString = '';
handleMouseMoveListener = (e) => {
//console.log(e.target.id);
e.preventDefault();
e.stopPropagation();
this.testString = this.testString + ' ' + e.target.id;
}
handleMouseUpHandler = (e) => {
alert(this.testString);
this.testString = '';
}
let elementsArray = document.querySelectorAll("div");
elementsArray.forEach(function (elem) {
elem.addEventListener('mousemove', this.handleMouseMoveListener);
elem.addEventListener('touchmove', this.handleMouseMoveListener);
elem.addEventListener('mouseup', this.handleMouseUpHandler);
elem.addEventListener('touchend', this.handleMouseUpHandler);
});
<!DOCTYPE html>
<html>
<head>
<title>Page Title</title>
<style>
div {
display: inline-block;
width: 150px;
height: 150px;
color: red;
border: 1px solid black;
}
</style>
</head>
<body>
<div id='div1'>div1</div>
<div id='div2'>div2</div>
<div id='div3'>div3</div>
</body>
</html>
【问题讨论】:
-
您可以尝试将您的事件监听器添加到文档元素中,并检查该事件的 currentTarget 是否是您需要的。
-
试过没用。
-
这适用于 iPad,但不适用于 Android 平板电脑
标签: javascript html