具有自动生成 ID 的动态点击功能
Dynamic click function with auto generate IDs
我有以下 html
代码,它是由 Wordpress 中的简码自动生成的。它包括在前端动态添加视频(来自 Youtube)。我的想法是在同一页面上放置多个视频。每次用户添加一个短代码时,它都会创建 html
.
<div class="row entry-video">
<div class="video-container">
<div class="video-cover" style="background-image:url('img/cover-video.jpg');"></div>
<iframe class="video-iframe" width="560" height="315" src="" frameborder="0" allowfullscreen></iframe>
</div>
</div>
为了使设计更具吸引力,用户可以在视频上添加自己的封面 (class video-cover
)。因此,当您单击图片时,封面会消失并自动播放视频。
我的问题是,由于代码是通过短代码动态添加的,而且页面上有多个视频,我无法成功地使点击操作(删除图像并播放每个视频)正常工作正确。
为每个视频条目自动添加ID的JS代码:
$('.entry-video').each(function(i) {
$(this).attr('id', 'video-' + (i + 1));
});
去除封面和播放视频的JS代码:
$('.video-cover').on('click',function(e){
$(this).fadeOut(400);
$('.video-iframe')[0].src += "?autoplay=1";
e.preventDefault();
});
如果只有一个视频,点击功能可以正常使用。这两个脚本都在工作,但彼此不相关。如果有更多视频,事情就会变得更复杂。所以我想做的是创建一个动态函数,生成并自动检测与 iframe
播放的 ID 相关的已单击封面的 ID。
非常感谢任何帮助,谢谢!
在运行时生成 id
属性是一种反模式,不要那样做。
相反,使用元素上的公共 类 通过从引发点击事件的元素遍历 DOM 来找到与之相关的元素来通用化逻辑。使用此模式意味着单个事件处理程序将适用于无限数量的元素。
在您的情况下,您可以使用 next()
方法实现此目的,因为目标元素是引发事件的 .video-cover
的兄弟元素。试试这个:
$('.video-cover').on('click', function(e) {
e.preventDefault();
$(this).fadeOut(400).next('.video-frame').prop('src', (i, src) => src += '?autoplay=1');
// alternative:
// $(this).fadeOut(400).next('.video-frame')[0].src += '?autoplay=1';
});
我有以下 html
代码,它是由 Wordpress 中的简码自动生成的。它包括在前端动态添加视频(来自 Youtube)。我的想法是在同一页面上放置多个视频。每次用户添加一个短代码时,它都会创建 html
.
<div class="row entry-video">
<div class="video-container">
<div class="video-cover" style="background-image:url('img/cover-video.jpg');"></div>
<iframe class="video-iframe" width="560" height="315" src="" frameborder="0" allowfullscreen></iframe>
</div>
</div>
为了使设计更具吸引力,用户可以在视频上添加自己的封面 (class video-cover
)。因此,当您单击图片时,封面会消失并自动播放视频。
我的问题是,由于代码是通过短代码动态添加的,而且页面上有多个视频,我无法成功地使点击操作(删除图像并播放每个视频)正常工作正确。
为每个视频条目自动添加ID的JS代码:
$('.entry-video').each(function(i) {
$(this).attr('id', 'video-' + (i + 1));
});
去除封面和播放视频的JS代码:
$('.video-cover').on('click',function(e){
$(this).fadeOut(400);
$('.video-iframe')[0].src += "?autoplay=1";
e.preventDefault();
});
如果只有一个视频,点击功能可以正常使用。这两个脚本都在工作,但彼此不相关。如果有更多视频,事情就会变得更复杂。所以我想做的是创建一个动态函数,生成并自动检测与 iframe
播放的 ID 相关的已单击封面的 ID。
非常感谢任何帮助,谢谢!
在运行时生成 id
属性是一种反模式,不要那样做。
相反,使用元素上的公共 类 通过从引发点击事件的元素遍历 DOM 来找到与之相关的元素来通用化逻辑。使用此模式意味着单个事件处理程序将适用于无限数量的元素。
在您的情况下,您可以使用 next()
方法实现此目的,因为目标元素是引发事件的 .video-cover
的兄弟元素。试试这个:
$('.video-cover').on('click', function(e) {
e.preventDefault();
$(this).fadeOut(400).next('.video-frame').prop('src', (i, src) => src += '?autoplay=1');
// alternative:
// $(this).fadeOut(400).next('.video-frame')[0].src += '?autoplay=1';
});