【问题标题】:jQuery on Bootstrap 4 modal videos - make code DRYBootstrap 4 模态视频上的 jQuery - 使代码干燥
【发布时间】:2023-03-26 21:55:01
【问题描述】:

我在一页上有几个视频。它们都在 Bootstrap 4 模态中,所以我必须找到一些代码,让每个视频都显示自动播放后模态。 (如果我一次选择所有视频,它们会同时播放和暂停。) 结果,我生成了一些漂亮的 WET 代码。

我想让这个干燥:

// Makes video1 play after modal is shown and pause video when the modal is closed
$('#video1').on('shown.bs.modal', function() {
  $('#autoplay-video1')[0].play();
})
$('#video1').on('hidden.bs.modal', function() {
  $('#autoplay-video1')[0].pause();
})

// video 2
$('#video2').on('shown.bs.modal', function() {
  $('#autoplay-video2')[0].play();
})
$('#video2').on('hidden.bs.modal', function() {
  $('#autoplay-video2')[0].pause();
})

// video 3
$('#video3').on('shown.bs.modal', function() {
  $('#autoplay-video3')[0].play();
})
$('#video3').on('hidden.bs.modal', function() {
  $('#autoplay-video3')[0].pause();
})

// video 4 ... (etc.)

【问题讨论】:

    标签: jquery twitter-bootstrap dry


    【解决方案1】:

    使用“begin with”选择器可能对您有用:

    $('[id^=video]').on('shown.bs.modal', function() {
      $('#autoplay-' + $(this).attr('id'))[0].play();
    })
    $('[id^=video]').on('hidden.bs.modal', function() {
      $('#autoplay-' + $(this).attr('id'))[0].pause();
    })
    

    但如果你有其他元素的 id 以“video”开头,这可能会中断,如下所示:

    <div id="video-wrapper">…</div>
    

    因此我建议使用自定义数据属性来避免这些问题:

    <video data-video="1">…</video>
    
    $('[data-video]').on('shown.bs.modal', function() {
      $('#autoplay-video' + $(this).attr('data-video'))[0].play();
    })
    $('[data-video]').on('hidden.bs.modal', function() {
      $('#autoplay-video' + $(this).attr('data-video'))[0].pause();
    })
    

    【讨论】:

    • 我已经尝试了您的两个建议,即使我没有任何其他 ID 为“视频”的元素(我只是让我的唯一视频 ID 听起来更中性,所以我没有不要用奇怪的名字混淆任何人)。我更喜欢类而不是 ID。使用您的干式解决方案,自动播放不再适合我。您能告诉我您将使用哪种 HTML 标记吗?这是我的 HTML,jQ + 您的第二个解决方案:link,我将如何避免为我的所有视频提供相同的 ID?我会改用一个类。
    • 在模态上设置data-video="1",而不是在视频上。然后使用&lt;video id="autoplay-video1" …&gt; 让我的代码示例到模态和视频之间的链接。
    • 但是,如果您每个模态都有一个视频,那么还有更简单的方法,例如:$('.modal-vide').on('shown.bs.modal', function() { $(this).find('video')[0].play(); })。只需在模态框上添加modal-video,然后搜索其中的第一个视频标签。
    • 谢谢,但我尝试了各种组合。这些都不适合我。
    猜你喜欢
    • 1970-01-01
    • 2014-08-03
    • 2012-01-04
    • 2014-12-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-09-16
    • 1970-01-01
    相关资源
    最近更新 更多