如何获取触摸事件点相对于目标元素的 x 坐标?
How to get x-coordinate of a touch event point relative to the target element?
所以我有一张看起来像这样的图像:
var elem = document.getElementById("bt");
elem.addEventListener("touchstart", handleStart, false);
function handleStart(e) {
e.preventDefault();
var touch = e.targetTouches[0];
X = touch.pageX;
Y = touch.pageY;
return [X, Y];
}
<img src="https://s3-us-west-2.amazonaws.com/s.cdpn.io/142996/sections-3.jpg" id="bt" width="900" height="600">
我想要做的是获取触摸事件相对于图像本身的 x 和 y 坐标。
将图像位置设置为绝对位置并设置其起始坐标(这里我将其设置为左上角)
#bt{
position:absolute;
left:0px;
top:0px;
}
现在触摸坐标是图像像素坐标。您可能需要考虑可用页面大小以及 window 大小和比例。
您也可以通过
获取元素坐标
var rect = elem.getBoundingClientRect();
console.log(rect.top, rect.right, rect.bottom, rect.left);
然后您可以将这些值用作 touch.x - rect.left
等
您可以使用 Jquery
轻松实现。在我的代码中,我使用 click
事件显示,因为我使用的是桌面,但您可以用触摸事件替换点击。
代码如下:
$('.clickable').bind('click', function(ev) {
var $div = $(ev.target);
var $display = $div.find('.display');
var offset = $div.offset();
var x = ev.clientX - offset.left;
var y = ev.clientY - offset.top;
$display.text('x: ' + x + ', y: ' + y);
});
.clickable {
border: 1px solid #333;
background: #eee;
height: 200px;
width: 200px;
margin: 15px;
position: absolute;
}
.display {
display: block;
height: 16px;
position: absolute;
text-align: center;
vertical-align: middle;
width: 100%;
top: 50%;
margin-top: -8px;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div class='clickable'>
<span class='display'></span>
</div>
所以我有一张看起来像这样的图像:
var elem = document.getElementById("bt");
elem.addEventListener("touchstart", handleStart, false);
function handleStart(e) {
e.preventDefault();
var touch = e.targetTouches[0];
X = touch.pageX;
Y = touch.pageY;
return [X, Y];
}
<img src="https://s3-us-west-2.amazonaws.com/s.cdpn.io/142996/sections-3.jpg" id="bt" width="900" height="600">
我想要做的是获取触摸事件相对于图像本身的 x 和 y 坐标。
将图像位置设置为绝对位置并设置其起始坐标(这里我将其设置为左上角)
#bt{
position:absolute;
left:0px;
top:0px;
}
现在触摸坐标是图像像素坐标。您可能需要考虑可用页面大小以及 window 大小和比例。
您也可以通过
获取元素坐标var rect = elem.getBoundingClientRect();
console.log(rect.top, rect.right, rect.bottom, rect.left);
然后您可以将这些值用作 touch.x - rect.left
等
您可以使用 Jquery
轻松实现。在我的代码中,我使用 click
事件显示,因为我使用的是桌面,但您可以用触摸事件替换点击。
代码如下:
$('.clickable').bind('click', function(ev) {
var $div = $(ev.target);
var $display = $div.find('.display');
var offset = $div.offset();
var x = ev.clientX - offset.left;
var y = ev.clientY - offset.top;
$display.text('x: ' + x + ', y: ' + y);
});
.clickable {
border: 1px solid #333;
background: #eee;
height: 200px;
width: 200px;
margin: 15px;
position: absolute;
}
.display {
display: block;
height: 16px;
position: absolute;
text-align: center;
vertical-align: middle;
width: 100%;
top: 50%;
margin-top: -8px;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div class='clickable'>
<span class='display'></span>
</div>