【发布时间】:2023-04-03 07:01:01
【问题描述】:
我有一个 HTML 音频播放器,它被称为 AngularJS 中指令的一部分。刷新页面后,播放器可以完美运行-我可以设置源并播放音频-控制台记录以下内容: 但是,如果我在我的应用程序中导航到另一个状态,然后加载/播放音频,则音频的 2 个实例开始播放。如果我在播放前访问 4 个状态,将播放 4 个音频实例!控制台记录以下内容:
为什么音频播放器会反复启动?当我在州之间移动时,如何保持它处于活动状态?我不想在每次更改状态时销毁它并重新初始化它,这会中断音频播放。
这里是相关代码。本质上,视图 footer.html 包含指令和播放器,并且被每个状态所包含。
index.html:
...
<div style="clear:both"></div>
<div ui-view="footer"></div>
</body>
app.js:
.state('audiolist', {
url: '/audiolist/',
views: {
sideNav: {
templateUrl: 'views/sideNav.html',
controller: 'sideNavController'
},
header: {
templateUrl: 'views/header.html',
controller: 'headerController'
},
content: {
templateUrl: 'views/list.main.html',
controller: 'listController as content'
},
footer: {
templateUrl: 'views/footer.html',
controller: 'apController as ap'
}
})
...
.state('saveditems', {
url: '/saveditems/',
views: {
sideNav: {
templateUrl: 'views/sideNav.html',
controller: 'sideNavController'
},
header: {
templateUrl: 'views/header.html',
controller: 'headerController'
},
content: {
templateUrl: 'views/saveditems.main.html',
controller: 'savedItemsController as content'
},
footer: {
templateUrl: 'views/footer.html',
controller: 'apController as ap'
}
}
...
页脚.html
<div class="audioplayer">
<!-- Audio Player -->
<hls-player id="player" playlist="{{ap.tracks}}"></hls-player>
...
指令/hlsPlayer.js
module.directive('hlsPlayer', function ($window, $templateRequest, $compile, $http, $rootScope) {
return {
restrict: 'AE',
link: function ($scope, element, attrs) {
$templateRequest("views/playerTemplate.html").then(function (html) {
// player functions
...
// play function
...
console.log("manifest loaded, found " + data.qualities + " quality level");
console.log("audio loaded and playing");
...
playerTemplate.html
...
<audio autobuffer preload="metadata" src="" id="radio" class="hidden" preload="none"></audio>
...
【问题讨论】:
标签: javascript angularjs angular-ui-router html5-video html5-audio