【问题标题】:Processing.js mouseX and mouseY not working on mobileProcessing.js mouseX 和 mouseY 在移动设备上不起作用
【发布时间】:2015-11-03 23:14:42
【问题描述】:

我使用 processing.js 在我的网站上发布了一个简单的处理草图,但是当我在 iPhone 和 iPad 上打开它时,它根本不起作用。我找到了一些 javacript 来使它工作并且它有所帮助,但是 mouseX 仍然获取手指相对于整个页面而不是画布区域的位置,所以它并不能完全正确地定位。我能做什么?

代码在这里:http://mqvlm.github.io/blog/rect.html

这是我正在使用的 javascript:

<canvas ontouchstart="touchStart(event);"
ontouchmove="touchMove(event);"
ontouchend="touchEnd(event);"
ontouchcancel="touchCancel(event);"
id="sketch" width="300" height="300" data-processing-sources="/code/rect.pde"> </canvas>

<script type="text/javascript">

var processingInstance;


function setProcessingMouse(event){
  if (!processingInstance) {  
    processingInstance = Processing.getInstanceById('sketch');  
    }  

  var x = event.touches[0].pageX;
  var y = event.touches[0].pageY;

  processingInstance.mouseX = x;
  processingInstance.mouseY = y;
};

function touchStart(event) {
event.preventDefault();
setProcessingMouse(event);
processingInstance.mousePressed();
};

function touchMove(event) {
event.preventDefault();
setProcessingMouse(event);
processingInstance.mouseDragged();
};

function touchEnd(event) {
event.preventDefault();
setProcessingMouse(event);
processingInstance.mouseReleased();
};

function touchCancel(event) {
event.preventDefault();
setProcessingMouse(event);
processingInstance.mouseReleased();
};

</script>

【问题讨论】:

  • 当你说它根本不起作用时,你到底是什么意思?您能否发布一个仅使用处理代码而不是额外的 JavaScript 代码(这不是必需的)的最小示例?
  • 我的意思是mouseX和mouseY根本无法在移动设备上运行,在这里,我发布了没有您建议的javascript的最小示例,请在您的移动设备上尝试:mqvlm.github.io/prueba.html
  • 你能在你的问题中发布这个最小示例的代码吗?
  • 另外,当我在手机上运行它时,它似乎工作正常。除了草图由于某种原因出现了两次。
  • 你在安卓上运行它吗?我在 Safari iOS 7.2.1 上运行它。我用于最小示例的代码只是常规

标签: javascript processing processing.js


【解决方案1】:

您应该使用screenXscreenY 而不是pageXpageY 来获取相对于用户屏幕的位置:

var x = event.touches[0].screenX;
var y = event.touches[0].screenY;

或者如果你想要相对于视口的位置,你可以使用clientXclientY

var x = event.touches[0].clientX;
var y = event.touches[0].clientY;

您可以查看完整的属性列表和更多信息here

【讨论】:

  • 我使用了 screenX 和 screenY,但它也不起作用。问题是,我之前的意思是,在移动设备上,处理草图采用触摸事件的坐标相对于整个页面的坐标 0,0 而不是画布的 0,0,这就是错误.这就是为什么手指与移动设备上的椭圆不匹配的原因!这就是我想要做的。
  • 无法在任何地方找到理想的答案,但使用 clientX 和 clientY 是最好的解决方案,谢谢!
  • 没问题。很高兴为您提供帮助,我希望您设法让事情按照您需要的方式工作:)
猜你喜欢
  • 2019-02-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-02-08
  • 1970-01-01
  • 2022-01-12
  • 2014-04-22
  • 1970-01-01
相关资源
最近更新 更多