Это мой первый вопрос, поэтому я стараюсь описать его как можно точнее и следую инструкциям stackoverflow «Как задать хороший вопрос?».Функция щелчка EventListener срабатывает несколько раз после повторной инициализации во время бесконечного прокрутки
Моя проблема:
Im используя «старый, но золото» infinite-scroll JQuery плагин для загрузки следующих должностей на WordPress сайте. Im также использует плагин lazyframe, чтобы загружать видео youtube «ленивыми» с нажатием кнопки воспроизведения видео. Для обеспечения функции lazyframe после загрузки набора новых сообщений с функцией infinte прокрутки, им инициализации lazyframe следующим образом с добавлением lazyframe('.lazyframe');
инициализации кода в function(newElements)
части бесконечной прокрутки ЯШ:
//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 создает несколько iframe ioutube.
Мои исследования пока показали мне, что причина, по которой событие срабатывает несколько раз, заключается в том, что событие привязано к элементу несколько раз. Следующий код показывает часть, где 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)
}
}
Любая идея, как решить эту проблему? Я пытался остановить распространение событий, но я не смог исправить это из-за недостатка знаний. Любая помощь будет оценена по достоинству.
Почему вы не задали 'click' событие через jquery? –