我有一个客户端站点的一部分,其中包含多个 Vimeo 视频,可以在 Bootstrap 模态中启动,所以我正在研究 jQuery 需要在其模态启动时自动播放视频,并在其模态关闭时暂停它。
以下代码有效,但我意识到它不是很有效,并且没有任何运气试图让 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 闭包的帮助下,使用以下内容完成了这项工作——简单实用的示例。它不是最强大的解决方案,但它越来越接近。
jQuery( 文档 ).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();
});
}
});