所以,我想要实现的是当用户点击A元素时,会出现一个bootstrap模态窗口并暂停正在播放的任何音频。模态关闭后,应恢复音频。
这是我一直在使用的代码,但无济于事:
playingaudio = false; // global variable
$(document).on("click", "a", function(){
if (playingaudio && $('#audioplayer').length) {
$('#audioplayer')[0].pause(); // pause audio programatically
playingaudio = true;
}
// show modal code
});
$('#myModal').on('hidden.bs.modal', function () {
// if there is an audioplayer and it is paused, resume playback
if (playingaudio && $('#audioplayer').length) {
$('#audioplayer')[0].play();
}
});
$('#audioplayer').on('play', function() {
playingaudio = true;
});
$('#audioplayer').on('pause', function(e) {
playingaudio = false;
});
奇怪的是,如果我在" playingaudio = true"中设置断点,则此代码有效。 A onclick事件处理程序中的行,但是在没有断点的情况下执行时,它无法完成所需的操作。
关于如何使这项工作的任何想法?
答案 0 :(得分:0)
此代码按您的要求运行。
debug:我添加了一个中央函数来管理更改变量,这样它就可以在控制台和标签中提供调试输出,这样你就可以在html视图中看到播放状态。
mock:我没有你的audioplayer或你的模态,但建立了它们的简单版本。手动暂停后显示模态按钮,然后单击按钮模拟隐藏模态。
关键变化:
重新开始播放的逻辑向后,因为你只想暂停播放。
<div id="audioplayer">
<div>
<span>Playing Mode: </span>
<span class='playing_mode_label'></span>
</div>
<br>
<a href="#">a button</a>
<br>
<button class="play_button">play button</button>
<br>
<br>
<button class='fake_modal'>fake modal - click to close</button>
</div>
// start out not playing
set_playing_mode(false, "init");
$('.fake_modal').hide();
$(document).on("click", "a", function() {
if (playingaudio && $('#audioplayer').length) {
$('#audioplayer').trigger('pause'); // pause audio programatically
$('.fake_modal').show(); // show modal
}
});
// play button
$('.play_button').on('click', function() {
$('#audioplayer').trigger('play');
});
$('.fake_modal').on('click', function() {
$('.fake_modal').hide(); //hide modal
// if there is an audioplayer and it is paused, resume playback
if (!playingaudio && $('#audioplayer').length) {
$('#audioplayer').trigger('play');
}
});
$('#audioplayer').on('play', function() {
set_playing_mode(true, "play");
});
$('#audioplayer').on('pause', function(e) {
set_playing_mode(false, "pause");
});
function set_playing_mode(mode, note) {
playingaudio = mode;
console.log(note + ": " + mode);
$('.playing_mode_label').text(mode);
}
答案 1 :(得分:0)
<audio controls id='audioplayer'>
<source src='http://www.jplayer.org/audio/mp3/TSP-01-Cro_magnon_man.mp3' type='audio/mpeg'>
Your browser does not support the audio element.
</audio>
<div>
<div>
<span>Playing Mode: </span>
<span class='playing_mode_label'></span>
</div>
<br>
<a href="#">a button</a>
<br>
<button class='fake_modal'>fake modal - click to close</button>
</div>
$('.fake_modal').hide();
$(document).on("click", "a", function() {
var audioplayer = $('#audioplayer');
if (audioplayer.length) { // if there is an audioplayer
if (!audioplayer.prop('paused') && audioplayer.prop('currentTime')) {
audioplayer.trigger('pause'); // pause audio
playingaudio = true;
} else {
playingaudio = false;
}
}
$('.fake_modal').show(); // show modal
});
$('.fake_modal').on('click', function() {
$('.fake_modal').hide(); //hide modal
var audioplayer = $('#audioplayer');
if (playingaudio && audioplayer.length) { // if there is an audioplayer
audioplayer.trigger("play");
}
});