我相信我找到了解决方案。 这是一个工作演示 。 如果您检查浏览器的网络部分,您会注意到在相应的模态打开之前它们不会加载。
您最初可以将iframe的src留空,因此不会加载任何内容。 将您的URL存储在数组中,然后您可以在shown.bs.modal
事件中使用事件处理程序,如您所述。
var iframes = ["URL1","URL2","URL3"]; $('.modal').on('shown.bs.modal', function() { var id = $(this).data('id'); $(this).find('iframe').attr('src',iframes[id]); });
您会注意到我引用了一个data-id
,您可以非常轻松地将其添加到每个模态中。
我从0开始,因为数组以0索引开头。
***注意 – 这样做的缺点是iframe必须在每次打开相应的模态时加载URL。
编辑:实际上,使用其他数据属性,您可以避免每次加载URL的问题。 更新的演示 。
检查shown.bs.modal
事件中的属性,然后替换已加载的URL。
$('.modal').on('shown.bs.modal', function() { var loaded = $(this).data('loaded'); if(loaded == false) { var id = $(this).data('id'); $(this).find('iframe').attr('src',iframes[id]); $(this).data('loaded', 'true'); } });
编辑2 – 使用php数组中的ID,您可以将它们转换为JS数组,如下所示:
var iframes =;
在关闭使用时清除模态
$('body').on('hidden.bs.modal', '.modal', function () { $(this).removeData('bs.modal'); });
对于其他部分不太确定你想做什么。 您可以查看jScroll,以便在用户开始滚动模式时仅加载其余video。
编辑:您可以从外部html文件加载模态的内容,这样只有当有人点击模态链接时才会加载videoiframe。