Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angularjs/25.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 AngularJs音频_Javascript_Angularjs_Html - Fatal编程技术网

Javascript AngularJs音频

Javascript AngularJs音频,javascript,angularjs,html,Javascript,Angularjs,Html,当音频结束时,我如何确认?我已附上我的代码。任何人都可以帮助我 app.controller("myCtrl",function($scope,ngAudio,$document) { $scope.src="aud.mp3"; $scope.play=false; $scope.play=function() { $scope.audio = ngAudio.load('aud.mp3');

当音频结束时,我如何确认?我已附上我的代码。任何人都可以帮助我

app.controller("myCtrl",function($scope,ngAudio,$document)
    {
        $scope.src="aud.mp3";
        $scope.play=false;
        $scope.play=function()
        {
            $scope.audio = ngAudio.load('aud.mp3');
            $scope.audio.play();
        }
        $scope.stop=function()
        {
            $scope.audio = ngAudio.load('aud.mp3');
            $scope.audio.pause();
        }
         $document[0].addEventListener("visibilitychange", function() {
        var doucmentHidden = document.hidden;
        if (doucmentHidden)
            $scope.audio.pause();
        else
            $scope.audio.play();
        }, false);
    });

在做了一些研究之后,我没有找到一个听者可以告诉你Aduio何时结束,但我发现了两个属性,可以给你一些有用的状态:

$scope.audio.paused

它们都返回布尔值,所以您需要做的是定义如下函数:

function listen(audio, callBack) { 
    if(audio.paused) {
         callBack();
    } else {
         setTimeout(listen);
    }
}
此函数的问题在于每次调用
.play()
方法时都需要调用它

$scope.audio.play();
listen($scope.audio, function () { 
    console.log("ended !!");
});
请注意,这不是一个好的解决方案,其中一个好的解决方案是使用本机
Audio
构造函数:

$scope.audio = new Audio("aud.mp3");
$scope.audio.onended = function () { 
    console.log("ended !! ");
}
$scope.audio.play();

不容易收听结束的事件,除非您自己编辑模块,否则我必须编辑该模块以允许事件侦听器
angular.audio.js Line 240

    cleverAudioFindingService.find(id)
        .then(function(nativeAudio) {
            audio = nativeAudio;
            audio.addEventListener('canplay', function() {
                audioObject.canPlay = true;
            });
             /*-----*/
            audio.addEventListener('ended',function(){
                alert('ended');
            });
             /*-----*/
        }, function(error) {
            audioObject.error = true;
            console.warn(error);
        });
由于这不是一个好的做法,我选择

    cleverAudioFindingService.find(id)
        .then(function(nativeAudio) {
            audio = nativeAudio;
            audio.addEventListener('canplay', function() {
                audioObject.canPlay = true;
            });
             /*-----*/
            audio.addEventListener('ended',function(){
                alert('ended');
            });
             /*-----*/
        }, function(error) {
            audioObject.error = true;
            console.warn(error);
        });