对于单页作品集,我为每个控制由 CMS 填充的视频播放器的按钮设置了一些重复代码。
我将有 15 到 20 个玩家来控制,每个玩家都有自己的页面上的按钮来启动它,并返回按钮来停止(每个部分有 1 个)。我使用限制代码字符数的 Webflow。
我很想找到更短/更智能的方法来为每个玩家编写此代码,而无需在代码中重复 20 次。
///////// for Player 0 //
// Play on click .titre
on('#titre-2', 'click', () => {
players[0].play();
});
// Stop and back to 0 at end
players[0].on('ended', function(event) {
players[0].pause();
players[0].currentTime = 0;
////////// for Player 1 //
// play on click .titre
on('#titre-3', 'click', () => {
players[1].play();
});
// stop at end
players[1].on('ended', function(event) {
players[1].pause();
players[1].currentTime = 0;
});
/////// for player 3 ////
...
... 以此类推,15 到 20 名玩家,直到最后一名玩家(使用 CMS 更新作品集时,玩家人数可能会发生变化)
编辑:这是从头开始的完整代码,最后是每个玩家的部分代码,需要改进:
<script src="https://cdn.plyr.io/3.5.6/plyr.js"></script>
<script>
document.addEventListener('DOMContentLoaded', () => {
const controls = [
'play-large','restart','play','progress',
'current-time','mute','volume','fullscreen'
];
//init PLAYERS
const players = Array.from(document.querySelectorAll('.player_js')).map(p => new Plyr(p,{ controls }));
// Expose player so it can be used from the console
window.players = players;
// Bind event listener
function on(selector, type, callback) {
document.querySelector(selector).addEventListener(type, callback, false);
}
///////// for Player 0 //
// Play on click .titre
on('#titre-2', 'click', () => {
players[0].play();
});
// Stop and back to 0 at end
players[0].on('ended', function(event) {
players[0].pause();
players[0].currentTime = 0;
////////// for Player 1 //
// play on click .titre
on('#titre-3', 'click', () => {
players[1].play();
});
// stop at end
players[1].on('ended', function(event) {
players[1].pause();
players[1].currentTime = 0;
});
/////// for player 3 ////
/// AND SO ON ...
});