Bootstrap -希望隐藏内容的,直到模态加载

jei2mxaa  于 12个月前  发布在  Bootstrap
关注(0)|答案(3)|浏览(111)

我使用jquery modal在一个页面中加载多个vimeo视频。我注意到DOM中所有视频的加载(34)都会影响性能(造成加载滞后)。所以我想确保视频播放器只在shown.bs.modal事件被触发时加载。
我是个菜鸟,不知道该怎么做。
模态:

<div class="modal fade" id="<?php echo $target; ?>" tabindex="-1" role="dialog" aria-hidden="true">
  <div class="modal-dialog">
    <div class="modal-content">    

      <div class="modal-body">
                <iframe class="test" id="vimeo" src="//player.vimeo.com/video/<?php echo $id; ?>" 
      frameborder="0" webkitallowfullscreen mozallowfullscreen allowfullscreen>
    </iframe>
      </div>      

  <div class="modal-footer">
    <?php echo $name; ?>
  </div>

    </div>
  </div>
</div>

注意:阅读已接受答案的备注

46scxncf

46scxncf1#

我想我已经找到解决办法了。Here is a working demo。如果您检查浏览器的网络部分,您会注意到它们直到相应的模态打开才加载。
你可以将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,您可以非常容易地将其添加到每个模态中。

<div class="modal fade" id="modal1" data-id="0" tabindex="-1" role="dialog" aria-hidden="true">

<div class="modal fade" id="modal2" data-id="1" tabindex="-1" role="dialog" aria-hidden="true">

我从0开始,因为数组从0开始索引。

  • 注意-这一点的缺点是,每次打开相应的模态时,iframe都必须加载URL。

编辑:实际上,使用另一个数据属性,您可以避免每次加载URL的问题。Updated demo

<div class="modal fade" id="modal1" data-id="0" data-loaded="false" tabindex="-1" role="dialog" aria-hidden="true">

如果URL已加载,请在替换URL之前检查shown.bs.modal事件中的属性。

$('.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 =<?php echo json_encode($php_array);?>;
s4n0splo

s4n0splo2#

要在关闭模式时停止播放视频,请反向执行相同的操作:

$('.modal').on('hide.bs.modal', function() {
    $(this).find('iframe').attr('src', '');
});
qco9c6ql

qco9c6ql3#

关闭使用时清除模态

$('body').on('hidden.bs.modal', '.modal', function () {
    $(this).removeData('bs.modal');
});

对于另一部分不太确定你想做什么。您可以查看jScroll,以便它只在用户开始滚动模式时加载其余的视频。
编辑:你可以从外部的html文件加载你的modal的内容,这样视频iframe只会在有人点击modal链接时加载。

相关问题