Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/html/84.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
Ipad 如何从soundmanager绑定HTML5::stalled事件?_Ipad_Html_Soundmanager2_Stalled - Fatal编程技术网

Ipad 如何从soundmanager绑定HTML5::stalled事件?

Ipad 如何从soundmanager绑定HTML5::stalled事件?,ipad,html,soundmanager2,stalled,Ipad,Html,Soundmanager2,Stalled,我正在尝试编写一个javascript应用程序,它使用[SoundManager 2][1]api,目标是在 所有桌面和移动浏览器。在iPad平台上,Soundmanager使用HTML5音频api,因为没有flash支持。现在,当我尝试背靠背播放两个音频文件时,两个文件都是为了响应单击事件而加载的,偶尔会引发[HTML5::stalled][2]事件。如何设置事件处理程序以捕获暂停的事件 由于我的应用程序中的声音对象是动态创建的,我不知道如何直接访问SoundManager创建的标记,因此我尝

我正在尝试编写一个javascript应用程序,它使用[SoundManager 2][1]api,目标是在 所有桌面和移动浏览器。在iPad平台上,Soundmanager使用HTML5音频api,因为没有flash支持。现在,当我尝试背靠背播放两个音频文件时,两个文件都是为了响应单击事件而加载的,偶尔会引发[HTML5::stalled][2]事件。如何设置事件处理程序以捕获暂停的事件

由于我的应用程序中的声音对象是动态创建的,我不知道如何直接访问SoundManager创建的标记,因此我尝试使用代理来处理暂停事件:

    document.delegate('audio', 'stalled', function (event) {...});
它不起作用。事件没有引发以响应暂停。我的处理程序中有一个警报

还尝试使用[Sound::onsuspend][3]来监听暂停,但onsuspend弹出
在声音的末尾::播放。我们如何区分暂停事件和其他可能引发audio::suspend的事件?有没有其他方法可以访问SoundManager必须创建的标签才能播放HTML音频?

我用以下解决方案解决了这个问题。逆向工程没有记录和发现这一点。 这一切都是关于访问html音频对象的,该对象在_a下可用

currentSound = soundManager.createSound({..});
currentSound._a.addEventListener('stalled', function() {
     if (!self.currentSound) return;
    var audio = this;
    audio.load();
    audio.play();
});

该方法的主体基于

我用以下解决方案解决了它。逆向工程没有记录和发现这一点。 这一切都是关于访问html音频对象的,该对象在_a下可用

currentSound = soundManager.createSound({..});
currentSound._a.addEventListener('stalled', function() {
     if (!self.currentSound) return;
    var audio = this;
    audio.load();
    audio.play();
});

该方法的主体基于

我可以建议使用三星智能电视平台对html5进行不同的修复:

var mySound = soundManager.createSound({..});  
mySound.load();  
setTimeout(function() {
    if (mySound.readyState == 1) {
        // this object is probably stalled
        }
}, 1500);
这是因为在html5中,与flash不同,“readystate”属性几乎是瞬间从“0”跳到“3”,跳过“1”因为如果曲目开始缓冲,它可以播放


希望这也能对您起作用。

我可以建议一种不同的修复方法,用于使用html5平台的三星智能电视:

var mySound = soundManager.createSound({..});  
mySound.load();  
setTimeout(function() {
    if (mySound.readyState == 1) {
        // this object is probably stalled
        }
}, 1500);
这是因为在html5中,与flash不同,“readystate”属性几乎是瞬间从“0”跳到“3”,跳过“1”因为如果曲目开始缓冲,它可以播放

希望这对你也有用