【问题标题】:How to get x-coordinate of a touch event point relative to the target element?如何获取触摸事件点相对于目标元素的 x 坐标?
【发布时间】:2017-03-03 08:45:51
【问题描述】:

所以我有一个看起来像这样的图像:

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 坐标。

【问题讨论】:

  • “获取触摸事件相对于图像的 x 和 y 坐标”是什么意思
  • 我的意思是在图像顶部 y = 0 和左侧 x =0

标签: javascript touch-event


【解决方案1】:

将图像位置设置为绝对位置并设置其起始坐标(这里我设置为左上角)

#bt{
  position:absolute;
  left:0px;
  top:0px;
}

现在触摸坐标是图像像素坐标。您可能需要考虑可用的页面大小以及窗口大小和比例。

你也可以通过

获取元素坐标
var rect = elem.getBoundingClientRect();
console.log(rect.top, rect.right, rect.bottom, rect.left);

然后您可以将这些值用作touch.x - rect.left 等。

【讨论】:

  • 但是如果我在页面顶部有一个标题怎么办,这是唯一的方法吗?
【解决方案2】:

您可以使用Jquery 轻松实现这一点。在我的代码中,我使用click 事件显示,因为我使用的是桌面,但您可以通过触摸事件替换点击。

FIDDLE

代码如下:

$('.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>

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-03-28
    • 1970-01-01
    • 2011-02-25
    • 2012-07-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-04-08
    相关资源
    最近更新 更多