更智能的代码,避免重复在一个页面中控制多个播放器

Smarter code that avoid repetition to control multiple players in one page

对于单页作品集,我为每个控制由 CMS 填充的视频播放器的按钮设置了一些重复代码。

我将有 15 到 20 个玩家来控制,每个玩家在页面上都有自己的按钮来启动它,return 按钮来停止(每个部分 1 个)。我使用限制代码字符数的 Webflow。

我很想找到 shorter/smarter 方法来为每个玩家编写此代码,而无需在代码中重复 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 ...

});

你可以循环代码:

for(let x = 0 ; x < 20 ; x ++){
     // Play on click .titre
    on('#titre-' + (x + 2), 'click', () => { 
    players[x].play();
    });
    // Stop and back to 0 at end 
    players[x].on('ended', function(event) {
    players[x].pause();
    players[x].currentTime = 0;
}

但最好的解决方案是创建 class 名玩家