通过循环实现jQuery效率 - for或each()

时间:2017-03-15 00:27:32

标签: jquery for-loop bootstrap-modal vimeo-api coding-efficiency

我有一个客户端网站的一部分,其中有多个Vimeo视频可以在Bootstrap模式中启动,所以我正在研究jQuery需要在其模式启动时自动播放视频,并在它出现时将其暂停。 s模态已关闭。

以下代码有效,但我意识到它效率不高,并且没有任何运气试图让for循环工作。如果有人能够教我如何钓鱼"在这里,我将来会更加高效。

var idPlayer0 = new Vimeo.Player('player_0');

jQuery('#modal-0').on('shown.bs.modal', function (e) {
    idPlayer0.play();
});
jQuery('#modal-0').on('hidden.bs.modal', function (e) {
    idPlayer0.pause();
});

// And do it again...

var idPlayer1 = new Vimeo.Player('player_1');

jQuery('#modal-1').on('shown.bs.modal', function (e) {
    idPlayer1.play();
});
jQuery('#modal-1').on('hidden.bs.modal', function (e) {
    idPlayer1.pause();
});

// And so on...

我尝试过以下无济于事......

// get total number of iframes on page
var iframes = document.getElementsByTagName('iframe');

var idPlayer = [];
for (var i = 0; i <= iframes; i++) {
    idPlayer[i] = new Vimeo.Player('player_' + i);

    jQuery('#modal-' + i).on('shown.bs.modal', function (e) {
        idPlayer[i].play();
    });
    jQuery('#modal-' + i).on('hidden.bs.modal', function (e) {
        idPlayer[i].pause();
    });
}

非常感谢任何帮助。谢谢!

修改

在@ryan和JavaScript closure inside loops – simple practical example的帮助下,使用以下内容工作。它不是最强大的解决方案,但它越来越近了。

jQuery(document).ready(function(){

// get total number of iframes on page
var iframes = document.getElementsByTagName('iframe').length;

var idPlayer = [];

for (let i = 0; i < iframes; i++) {

    idPlayer[i] = new Vimeo.Player(document.getElementById("player_"+[i]));

    jQuery('#modal-' + i).on('shown.bs.modal', function (e) {
        idPlayer[i].play();
    });
    jQuery('#modal-' + i).on('hidden.bs.modal', function (e) {
        idPlayer[i].pause();
    });
}

});

0 个答案:

没有答案