How to disable html5 audio element play/pause button
通过html5音频元素中的"播放/暂停"按钮禁用或阻止事件的方式是什么?
我正在尝试这样的事情:
1 2 3
| document.getElementById(id).addEventListener("pause", function() {
$(this).trigger("play");
}); |
这是一个单独的作品,但是我的问题是我想在单击音频元素所在的div时控制播放/暂停:
1 2
| <source src="my_song.mp3" type="audio/mpeg">
</audio> |
1 2 3 4 5 6 7 8 9 10
| var is_playing;
$("#my_div").click(function () {
if (is_playing) {
$('#my_audio').trigger("pause");
is_playing = false;
} else {
$('#my_audio').trigger("play");
is_playing = true;
}
}); |
因此当我使用音频元素的暂停/播放按钮时,这会导致冲突。因此,我正在寻找一种方法来防止发生播放/暂停音频元素控件的事件(而不是整个控件,因为我需要使用搜寻栏和音量)。
- "我的问题是我用其他东西控制音频"什么是"其他东西"?您可以创建堆栈片段进行演示吗?
-
使用此代码,播放和暂停会连续调用...我怀疑这是您要寻找的..
-
@ guest271314我添加了我想确切执行的操作的信息。
-
@Rayon是的,很抱歉,我删除了暂停功能,确实确实是无限循环
-
@jck,那是什么问题?
-
@Rayon问题是,当我单击"播放/暂停"按钮时,它会触发2个事件:div上为1,播放按钮上为1,因此无法正常工作。
-
"问题是,当我单击"播放/暂停"按钮时,它会触发2个事件:div上的1个事件和"播放"按钮上的1个事件"这怎么可能?是否有附加的事件侦听器附加到#my_audio元素?
-
这确实是糟糕的UX设计。原因是,在未运行JavaScript的客户端上,您将拥有一个很大的播放按钮(我假设您更喜欢用户单击而不是本机按钮),不会执行任何操作,然后他们将拥有一个无法播放或暂停的视频元素。
-
TY @PatrickRoberts,您是对的,希望该解决方案也可以在不使用JS的情况下也能很好地工作(我现在已经对其进行了测试)。那是因为停用也是由JS完成的,所以如果没有JS,大按钮仍然可以使用。
play和pause不是jQuery方法。尝试在元素
上调用.play(),.pause()
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
| $(function() {
var is_playing;
$("#my_div").click(function(e) {
// if `e.target` is not `` element
if(e.target.tagName !=="AUDIO") {
if (is_playing) {
$('#my_audio')[0].pause();
is_playing = false;
} else {
$('#my_audio')[0].play();
is_playing = true;
}
} else {
e.stopPropagtion()
}
});
}); |
plnkr http://plnkr.co/edit/l5NejZ4rvxTZLPghkFWF?p=preview
- TY @ guest271314,但这与我使用triger()方法的代码的工作方式相同,因此无济于事。我遇到的问题是,当我单击音频元素控件的"播放/暂停"按钮时,它会触发2个事件:1在div上,1在播放按钮上,因此无法正常工作。
-
@jck可以创建一个plunkr plnkr.co进行演示的堆栈片段吗?
-
@jck"然后我遇到的问题是,当我单击音频元素控件的播放/暂停按钮时,它会触发2个事件:1在div上,1在播放按钮上""是另一个附加到#my_div元素的click事件哪个没有出现在"问题"上?参见plnkr plnkr.co/edit/l5NejZ4rvxTZLPghkFWF?p=preview
-
我看到了您的示例,您可以在其中尝试摆脱的行为:如果您在div中单击" click"一词,则会触发事件ok,然后尝试单击音频元素的播放按钮,您将看到您需要单击2次,因为它会触发div单击实际的按钮单击,因此它会同时暂停和播放,并且不起作用。 (您可以在Firefox上很好地看到)
-
TYVM @ guest271314我正在使用stopPropagation()事件方法朝这个方向搜索,但没有考虑过检查目标标记名。现在效果很好。