html5画布 - touchmove - 如何计算速度和方向?

时间:2013-04-18 19:41:50

标签: javascript html5-canvas touchmove

所以我想测量用户在html5画布上滑动的速度和方向?

似乎应该有一些已经写好的东西,所以我不必重新发明轮子,但我找不到任何东西。有人知道JavaScript函数吗?

如果我必须自己做,我在想这个:

  • 抓住触摸事件x& y,将它们存储在数组变量
  • 计算2点之间的斜率(如果斜率不同,可以将其平均)
  • 不确定如何测量速度,也许是点之间的距离?

还有其他想法吗?

这是我的画布和我的形状,它会听取触摸事件。触摸我的iphone或iphone模拟器时,我通常会收到1或2个事件。我看到了坐标。我正在使用kineticjs进行舞台和塑造。

要尝试一下,请转到iPhone中的此网址,然后将手指放在圆圈上并将其推到某处。 (或者,如果你有ios模拟器,你也可以使用它)

这是我的小提琴: http://jsfiddle.net/jnylund/uRgZZ/16/

   function writeMessage(messageLayer, message) {
   var context = messageLayer.getContext();
   messageLayer.clear();
   context.font = '18pt Calibri';
   context.fillStyle = 'black';
   context.fillText(message, 10, 25);
   var div = document.getElementById('tevents');
   div.innerHTML = div.innerHTML + message + "<BR/>";

}

var stage = new Kinetic.Stage({
   container: 'container',
   width: 460,
   height: 320
});

var layer = new Kinetic.Layer();
var messageLayer = new Kinetic.Layer();

var circle = new Kinetic.Circle({
   x: stage.getWidth() / 2,
   y: stage.getHeight() / 2,
   radius: 40,
   fill: 'red',
   stroke: 'black',
   strokeWidth: 4 //,
   // draggable: true
});

circle.setX(230);
circle.setY(160);

circle.on('touchmove', function (event) {
   writeMessage(messageLayer, 'touch event length is ' + event.touches.length);
   for (var i = 0; i < event.touches.length; i++) {
       var touch = event.touches[i];
       writeMessage(messageLayer, 'event x: ' + touch.pageX + ', y: ' + touch.pageX);
   }

   var touchPos = stage.getTouchPosition();
   writeMessage(messageLayer, 'stage x: ' + touchPos.x + ', y: ' + touchPos.y);

});

// add the shape to the layer
layer.add(circle);

// add the layer to the stage
stage.add(layer);
stage.add(messageLayer);

感谢 乔尔

2 个答案:

答案 0 :(得分:6)

您可以通过以下步骤完成此操作:

  • 触及,存储时间和位置
  • 补足,存储时间和位置

在与修饰相同的处理程序中继续执行以下步骤:

要获得与您相关的因素来划分时差的距离。值越高,速度越快。

答案 1 :(得分:1)

可以通过多种方式测量速度:

  • Timestamps在您的初始点和最终点之间以像素/毫秒为单位。
  • 帧速率,固定速率,以每帧像素或每秒像素数衡量。

然后将值转换为应用中使用的比例,例如kph或mph for racing。