【发布时间】:2017-02-03 21:17:24
【问题描述】:
这是我的第一个问题,所以我尝试尽可能准确地描述它并遵循 stackoverflow 指南“我如何提出一个好问题?”
我的问题:
我正在使用“旧但黄金”infinite-scroll jQuery 插件来加载 wordpress 网站上的下一篇文章。我还使用lazyframe 插件通过单击视频的播放按钮来“懒惰”地加载 youtube 视频。为了在使用无限滚动功能加载一组新帖子后确保lazyframe功能,我通过将lazyframe('.lazyframe');初始化代码添加到无限滚动js的function(newElements)部分来初始化lazyframe:
//infinite scroll
if ($masonry.length && obj_testsite.infinitescroll != 'disable') {
nextSelector = obj_testsite.nextselector;
if (document.URL.indexOf('/source/') != -1) {
nextSelector = '#navigation #navigation-next a';
}
$masonry.infinitescroll({
navSelector : '#navigation',
nextSelector : nextSelector,
itemSelector : '.thumb',
prefill: true,
bufferPx : 500,
loading: {
msgText: '', // load spinner icon instead of gif images - see below
finishedMsg: obj_testsite.__allitemsloaded,
img: '',
finished: function() {}
}
}, function(newElements) {
lazyframe('.lazyframe');
var $newElems = $(newElements);
$('#infscr-loading').fadeOut('normal');
$masonry.masonry('appended', $newElems, true);
});
}
到目前为止,这工作正常。但是,当我向下滚动并加载几组无限滚动的帖子然后单击播放按钮时,有时lazyframe 插件会创建多个 youtube iframe。
到目前为止,我的研究表明,事件多次触发的原因是,事件多次附加到元素。以下代码显示了lazyframe插件使用addEventListener函数来定位文档中的元素的部分:
function n(e) {
if (e instanceof HTMLElement != !1) {
var t = {
el: e,
settings: i(e)
};
t.el.addEventListener("click", function() {
return t.el.appendChild(t.iframe)
}), d.videolazyload ? l(t) : s(t, !!t.settings.thumbnail)
}
}
知道如何解决这个问题吗?我试图阻止事件传播,但由于缺乏知识,我无法修复它。任何帮助将不胜感激。
【问题讨论】:
-
为什么你没有通过 jquery 设置 'click' 事件?
标签: javascript jquery wordpress infinite-scroll