添加event.preventDefault()杀死SoundJS

时间:2014-05-03 23:35:34

标签: javascript html5 audio soundjs

我有一个现有的JavaScript游戏我正在尝试使用SoundJS添加声音。我遇到的问题是,当玩家在屏幕上移动手指时阻止iphone拖动窗口的代码行也会导致所有声音无法播放。如果我注释掉那一行(“e.preventDefault();”),声音效果很好,但游戏无法播放。有没有其他人遇到这个?这是获取鼠标坐标的完整功能:

function mouse_move (finger, e)
  {
  if (!e) var e = event;
  if (finger == true) e.preventDefault();

  main_target_x = e.pageX - canvas_html.offsetLeft;
  main_target_y = e.pageY - canvas_html.offsetTop;
  }

2 个答案:

答案 0 :(得分:0)

感谢您的提问。我之前没有看过这种行为,因为SoundJS对mouse_move事件没有任何作用,所以它确实没有意义。我最好的猜测是,preventDefault以某种方式应用于所有事件。

如果你可以将一个最小的峰值组合在一起来演示这个问题,我会尝试进一步研究它。

希望有所帮助。

答案 1 :(得分:0)

问题已解决。

我发现了一种防止屏幕拖动的轻微替代方式,这似乎不会干扰声音。我的事件处理程序:

canvas_html.addEventListener   ("mousedown",   function() {mouse_down (false)}, false);
canvas_html.addEventListener   ("mousemove",   function() {mouse_move (false)}, false);
canvas_html.addEventListener   ("touchstart",  function() {mouse_down (true)},  false);
canvas_html.addEventListener   ("touchmove",   function() {mouse_move (true)},  true);
canvas_html.addEventListener   ("touchend",    function() {mouse_up (true)},    false);
document.body.addEventListener ("mouseup",     function() {mouse_up (false)},   false);
document.body.addEventListener ("touchcancel", function() {mouse_up (true)},    false);
document.body.addEventListener ('touchmove',   function (event) {event.preventDefault()}, false);

我评论了" preventDefault"在我的mouse_move()函数中添加了一个新的事件处理程序,用于' touchmove'在列表的末尾,只是为了处理" preventDefault"。

这只是一个疯狂的猜测,我不完全确定它为什么会这样,而不是其他方式。然而,确实有效,我现在既有声音又有稳定的屏幕。

相关问题