angular不会更改json的音频源

angular does not change audio source from json

本文关键字:音频 json angular      更新时间:2023-09-26

我正在尝试将音频文件嵌入到带有音频标记的HTML中。播放音频的src是从API获得的,我有5-6个不同的音频文件。

当我点击playStart()时,播放的音频文件是相同的,即使src显示不同的链接

<tbody>
    <tr ng-repeat="val in values track by $index">
        <td ng-bind="$index +1">1</td>
        <td ng-bind="val._id">ED1500322</td>
        <td>
            <audio id="audioTag">
                <source controls ng-src="{{val.file}}"></source>
            </audio>
            <button class="play-btn" ng-click="playStart()"><img src="app_static/images/play.png"></button>
            <button class="play-btn" ng-click="playStop()">stop</button>
        </td>
        <td ng-bind="val.result"></td>
    </tr>
</tbody>

Js文件

$scope.playStart = function() {
    var audio = document.getElementById("audioTag");
    audio.load();
    audio.play();
};
$scope.playStop = function() {
    var audio = document.getElementById("audioTag");
    audio.pause();
    audio.currentTime = 0;
};

我只听到相同的音频片段,即使DOM显示链接是不同的

感谢您提供从api 获得的任何音乐播放帮助

使用类:

HTML

<tbody>
<tr ng-repeat="val in values track by $index">
    <td ng-bind="$index +1">1</td>
    <td ng-bind="val._id">ED1500322</td>
    <td>
        <audio class="audioTag">
            <source controls ng-src="{{val.file}}"></source>
        </audio>
        <button class="play-btn" ng-click="playStart($index)"><img src="app_static/images/play.png"></button>
        <button class="play-btn" ng-click="playStop($index)">stop</button>
    </td>
    <td ng-bind="val.result"></td>
</tr>

JS

$scope.playStart = function(index_) {
    var audio = document.getElementsByClassName("audioTag")[index_];
    audio.load();
    audio.play();
};
$scope.playStop = function() {
    var audio = document.getElementsByClassName("audioTag")[index_];
    audio.pause();
    audio.currentTime = 0;
};

您的问题是

 document.getElementById("audioTag")

始终返回页面中的第一个元素。

你可以做的是更改id,这样每个音频元素都会有不同的id。

更改

<audio id="audioTag">

 <audio id="audioTag{{$index}}">

因此元素将具有标签"audioTag1"、"audioTag2"。

之后,将调用更改为playStart,将playStop函数更改为:

playStart('audioTag{{$index}}')

因此,您将获得id作为参数。

你的功能变成:

$scope.playStart = function(id) {
    var audio = document.getElementById(id);
    audio.load();
    audio.play();  
};

仅此而已。