【问题标题】:X and y coordinates while mousedown鼠标按下时的 X 和 y 坐标
【发布时间】:2017-03-26 21:02:12
【问题描述】:

我目前正在制作一款需要玩家在触摸屏设备上拖动对象的游戏。

我使用了事件侦听器mousemove,它在我的英特尔 XDK 仿真器上运行,但现在我将它移动到触摸屏设备,我需要一个触摸事件,即 mousemovemousedown ,我不知道该怎么做。

理想代码示例:

canvas.addEventListener("mousemove" && "mousedown", function(e){  
    pointerX = e.pageX;
    pointerY = e.pageY;
}

所以这个理想的代码在鼠标按下时会吐出 x 和 y,并且它已经移动了。

如果有人知道合法的语法或不同的方法,那将是一个很大的帮助。

我不想将 JQuery 并入其中,只是纯 JS。

谢谢! :)

编辑:让我重新措辞一下,这样一切都直截了当。当用户拖动一个对象时,我需要一个函数在整个拖动过程中吐出指针的 x 和 y。

【问题讨论】:

  • “我需要一个 mousemove 和 mousedown 事件监听器,但我不知道该怎么做。”我假设您的意思是触摸事件?
  • @OusmaneMahyDiaw 是的,我就是这个意思,抱歉。

标签: javascript canvas mousemove mousedown


【解决方案1】:

每个 MDN:

EventTarget.addEventListener() 方法在调用它的 EventTarget 上注册指定的侦听器。事件目标可以是文档中的元素、文档本身、窗口或任何其他支持事件的对象(例如 XMLHttpRequest)。

注意上面的“eventTarget”。 AddEventListener 方法只接受一个代表 EventType 的字符串。您需要编写一个自定义函数来迭代多个事件:

const target = document.getElementById("myDiv");

['mousedown', 'mousemove'].forEach(eventType => {
  target.addEventListener(eventType, (event) => {
    target.innerText = `x: ${event.pageX} y: ${event.pageY}`;
  });
});
#myDiv {
  width: 100px;
  height: 100px;
  background-color: orange;
  color: white;
}
<div id="myDiv"></div>

【讨论】:

  • 天才!谢谢。
  • 哎呀,伤了我的大脑.....{ const target = document.getElementById("myDiv"); ['mousedown','mousemove'].forEach((eventType) => { target.addEventListener(eventType, (event) => { target.textContent = x: ${event.pageX} y: ${event.pageY}; }); }); }
  • 感谢您抽出宝贵时间查看我的回答,并为我伤害了您的大脑而道歉。我希望你仍然可以好好利用它;)
  • :) 虽然使用 innerText 会触发每个鼠标事件的重排,如果使用 textContent 可以避免这种情况,但不会再伤脑筋了..
【解决方案2】:

对于触控设备,您应该查看touchstarttouchendtouchcanceltouchmove

触摸事件类似于鼠标事件,只是它们支持同时触摸和在触摸表面的不同位置。

https://developer.mozilla.org/en-US/docs/Web/API/Touch_events`

【讨论】:

  • 我读了它,但我仍然不明白我应该如何在鼠标向下移动时执行一个函数。抱歉,如果这些问题比较简单,我对触摸事件还很陌生。
【解决方案3】:

MDN 有一篇关于触摸事件的精彩帖子。这些帖子不仅充满了质量信息,而且还显示了许多 javascript 代码,这些代码将为您提供触摸事件的良好资源。

接口

TouchEvent

表示当表面上的触摸状态发生变化时发生的事件。

Touch

表示用户和触摸表面之间的单点接触。

TouchList

代表一组触摸;例如,当用户在表面上同时有多个手指时使用。


这如何解决我目前的问题?

以上信息为您可能想要查看的所有类型的事件提供了更多详细信息。但是,对于您的具体问题,您应该查看 touchmovetouchend 事件。

旁注 - 检查 touchmovetouchend 链接是否存在兼容性问题。

【讨论】:

  • 那么我将如何使用它来运行同时触摸?我只是在玩家拖动这个对象时询问 x 和 y。
  • 哦...我在移动设备上尝试过,但没有成功。我正在使用 Intel XDK 构建,它可以在模拟器上运行,但不能在手机上运行......
  • @AssafiCohen-Arazi 有趣的是,它适用于您的模拟器,但不适用于手机。好吧,现在这是另一个问题,但我会继续讨论。
  • 它只是冻结,对象不会移动。我觉得这是因为计算机将拖动视为拖动,而手机将其视为尚未完成的点击。
猜你喜欢
  • 2014-02-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-12-02
  • 1970-01-01
  • 2019-12-07
  • 2011-01-13
  • 2016-11-30
相关资源
最近更新 更多