Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/399.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 添加event.preventDefault()将终止SoundJS_Javascript_Html_Audio_Soundjs - Fatal编程技术网

Javascript 添加event.preventDefault()将终止SoundJS

Javascript 添加event.preventDefault()将终止SoundJS,javascript,html,audio,soundjs,Javascript,Html,Audio,Soundjs,我有一个现有的javascript游戏,我正在尝试使用SoundJS添加声音。我遇到的问题是,当播放器在屏幕上移动手指时,阻止iphone拖动窗口的代码行也导致所有声音无法播放。如果我注释掉那一行(“e.preventDefault();”),声音效果会很好,但游戏无法播放。还有其他人碰到过这个吗?以下是获取鼠标坐标的完整函数: function mouse_move (finger, e) { if (!e) var e = event; if (finger == true) e

我有一个现有的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;
  }

谢谢你的提问。我以前从未见过这种行为,而且它真的没有意义,因为SoundJS对鼠标移动事件没有任何作用。我最好的猜测是,preventDefault以某种方式应用于所有事件

如果你能拿出一个最小的尖峰来演示这个问题,我将尝试进一步研究它

希望能有所帮助。

问题已解决

我找到了一种稍微替代的方法来防止屏幕拖动,这似乎不会干扰声音。我的事件处理程序:

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);
我注释掉了mouse_move()函数中的“preventDefault”,并在列表末尾添加了一个新的“touchmove”事件处理程序,以处理“preventDefault”


这只是一个胡乱猜测,我不完全确定为什么它是这样工作的,而不是相反。不过,它确实可以工作,我现在既有声音又有稳定的屏幕。

嗨,Ojay。谢谢你的回复。你能描述一下“最小峰值”是什么意思吗?我不熟悉这个术语。所谓最小峰值,我指的是一个小测试用例,它具有重现问题所需的最少代码量。这使我们这边的问题更容易解决。