2015-03-31 41 views
1

如何确认音频以角度js结束?我附上我的代码。任何人都可以帮助我。AngularJs音频

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); 
    }); 

回答

0

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

$scope.audio.paused 

$scope.audio.canPlay 

它们都返回布尔值,所以你需要做的,是这样定义一个函数:

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(); 
0

不容易听式的事件,除非您编辑自己的模块,我不得不编辑模块,让事件侦听器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); 
     }); 

因为这不是一个很好的做法,我交替使用this angular-player