我有一个脚本,允许我点击一个div来开始给定偏移的音频轨道(因此充当提示)。我在页面中有几个这样的div。在某些情况下,他们只会按顺序进行比赛。在其他情况下,偏移被误解。例如,当我有这个div:
<script>
var status = 'S' ;
function pausecomp(ms) {
ms += new Date().getTime();
while (new Date() < ms){}
}
function play_it( aud_id ) {
if ( status == 'S' ) {
var offset = $("#"+aud_id+"_offset")[0].value ;
if ( offset > $("#" + aud_id )[0].duration ) { alert ( "offset beyond end of track" ); return; }
$("#" + aud_id)[0].currentTime = offset ;
$("#" + aud_id)[0].volume = 1 ;
$("#" + aud_id)[0].play() ;
status = 'P' ;
$("#"+aud_id+"_div").css('backgroundColor', 'cyan') ;
} else if ( status == 'P' ) {
$("#"+aud_id+"_div").css('backgroundColor', 'green') ;
status = 'F' ;
fadeout( aud_id ) ;
stop( aud_id );
status = 'S' ;
} else if ( status == 'F' ) {
stop( aud_id ) ;
status = 'S' ;
}
}
function fadeout(aud_id) {
// reduce the volume by .01 every 100 ms
var volume = $("#" + aud_id)[0].volume ;
var stop = 100 ;
if ( volume > 0 ) {
stop = Math.floor( 100*volume ) ;
}
for ( var i = 1 ; i < stop ; i++ ) {
reduceVol($("#" + aud_id)[0]);
pausecomp(60) ;
}
$("#" + aud_id)[0].volume = 0 ;
}
function reduceVol(audio_obj) {
var volume = audio_obj.volume ;
volume = volume - 0.01 ;
if ( volume >= 0 ) {
audio_obj.volume = volume ;
}
}
function stop(aud_id) {
$("#" + aud_id)[0].pause() ;
}
</script>
<div style='display:inline-block; width:300px;'>
<audio id="my_audio_3">
<source src="Artists\The Black Keys\El Camino\01.Lonely Boy.mp3" type="audio/mpeg">
</audio>
<input type='hidden' id='my_audio_3_offset' value='185.5' />
<div id='my_audio_3_div' style='background-color:lightblue; width:200px; height:100px; border:1px solid black; vertical-align:middle; text-align:center;' onclick="play_it('my_audio_3')">Artists\The Black Keys\El Camino\01.Lonely Boy.
</div>
<button type="button" style='width:200px;' onclick="stop('my_audio_3')">Stop</button>
</div>
在文件本身中,偏移正常工作。如果我和一堆类似的div一起使用它,它根本不会播放。在其他组合中,(似乎它与某些文件有关,但我无法缩小其中的原因),有些在点击时可以正常播放,有些只在首先播放之前播放的文件中播放。 / p>