暂停所有其他视频,无论页面上有多少视频
Pausing all other videos, regardless of how many videos are on a page
因此,我在一个多页项目中使用 video.js,该项目的每个页面上都有不同数量的视频。我想播放一个视频以暂停页面上播放的任何其他视频。我已经让它工作了,但我的代码只有在专门为页面制作时才能工作,而不是在每个页面上单独工作。
HTML(例子)
<video id="video5" poster="poster.png" class="video-js vjs-16-9 vjs-big-play-centered"
data-setup='{
"controls": true,
"autoplay": false,
"preload": "none"
}'>
<source src="video.mp4" type='video/mp4'>
</video>
JS
var player1 = videojs('video1');
var player2 = videojs('video2');
var player3 = videojs('video3');
var player4 = videojs('video4');
var player5 = videojs('video5');
var player6 = videojs('video6');
var players = [player1, player2, player3, player4, player5, player6];
players.forEach(function(player) {
player.on('play', function() {
console.log('test');
players.forEach(function(pl) {
if (pl !== player) {
pl.pause();
}
})
})
});
因此,如果我有 6 个 ID 一致的视频,这就可以正常工作。但是,如果我有更多或更少,它就会破裂。有没有一种方法可以将 JS 格式化为仅通过 class 而不是通过 id 暂停任何内容?我试过 ('.video-js').pause()
但这会引发错误。
您可以通过 class 名称而不是 ID select 这些元素。像这样:
var videos = document.getElementsByClassName('video-js');
for (var i = 0; i < videos.length; i++) {
videos[i].pause();
}
如果您正在使用 jquery 那么。
$('video').each((videoIndex, video) => {
console.log('video paused', video);
video.pause();
})
NM,找到答案了。留下这个,以便可能更容易为人们找到。
var medias = Array.prototype.slice.apply(document.querySelectorAll('audio,video'));
medias.forEach(function(media) {
media.addEventListener('play', function(event) {
medias.forEach(function(media) {
if(event.target != media) media.pause();
});
});
});
因此,我在一个多页项目中使用 video.js,该项目的每个页面上都有不同数量的视频。我想播放一个视频以暂停页面上播放的任何其他视频。我已经让它工作了,但我的代码只有在专门为页面制作时才能工作,而不是在每个页面上单独工作。
HTML(例子)
<video id="video5" poster="poster.png" class="video-js vjs-16-9 vjs-big-play-centered"
data-setup='{
"controls": true,
"autoplay": false,
"preload": "none"
}'>
<source src="video.mp4" type='video/mp4'>
</video>
JS
var player1 = videojs('video1');
var player2 = videojs('video2');
var player3 = videojs('video3');
var player4 = videojs('video4');
var player5 = videojs('video5');
var player6 = videojs('video6');
var players = [player1, player2, player3, player4, player5, player6];
players.forEach(function(player) {
player.on('play', function() {
console.log('test');
players.forEach(function(pl) {
if (pl !== player) {
pl.pause();
}
})
})
});
因此,如果我有 6 个 ID 一致的视频,这就可以正常工作。但是,如果我有更多或更少,它就会破裂。有没有一种方法可以将 JS 格式化为仅通过 class 而不是通过 id 暂停任何内容?我试过 ('.video-js').pause()
但这会引发错误。
您可以通过 class 名称而不是 ID select 这些元素。像这样:
var videos = document.getElementsByClassName('video-js');
for (var i = 0; i < videos.length; i++) {
videos[i].pause();
}
如果您正在使用 jquery 那么。
$('video').each((videoIndex, video) => {
console.log('video paused', video);
video.pause();
})
NM,找到答案了。留下这个,以便可能更容易为人们找到。
var medias = Array.prototype.slice.apply(document.querySelectorAll('audio,video'));
medias.forEach(function(media) {
media.addEventListener('play', function(event) {
medias.forEach(function(media) {
if(event.target != media) media.pause();
});
});
});