liqrizz
@liqrizz
лол

Как передать callback один раз при mutation Observe?

У меня есть записи которые я подгружает через ajax. То есть обработать их через js напрямую не получится (например добавить в закладки. или посмотреть видео обзор в popup), так как я мутировал изначально предопределенный DOM узел. По этому я начал его прослушивать через mutation observer(не особо понимаю как его использовать). Проблема в том что когда подгрузились например 10 записей, я мутировал DOM 10 раз, а значит и callback передаться 10 раз (один клик сработает 10 раз). Как мне передать только 1 callback после всех изминение dom?

jQuery(document).ready(function($){
let observersmart = new MutationObserver(mutations=> {
        smartmutat();
    });
observersmart.observe(smartthink, {
  childList: true,
  subtree: true,
  characterDataOldValue: true
});
smartmutat();

function smartmutat(){
    var fclear, bclear;
    $("#smartthink .td-module-container").hover( hoverVideo, hideVideo );
    $("#smartthink .td-module-container").hover(function(){
        var videolink2 = $(this).find('#metavalll').attr('data-popup-video');
        if(videolink2!==''){
            bclear = setTimeout(function() {
                $(this).find('video').css('opacity', '1');
                $(this).find('.entry-thumb').addClass('enttry-active');
                $('video', this).get(0).play();
            }.bind(this), 200);
            fclear = setTimeout(function(){
                $(this).find('video').css('opacity', '0');
                $(this).find('.entry-thumb').removeClass('enttry-active');
            }.bind(this), 2800);
        }
    },function(){
            $(this).find('.entry-thumb').removeClass('enttry-active');
            $(this).find('video').css('opacity', '0');
        clearTimeout(fclear);
    });
    function hoverVideo(e) {
        $('video', this).get(0).load(); 
    }
    function hideVideo(e) {
        clearTimeout(bclear);
        $('video', this).get(0).pause();
    }
    $('#smartthink .td-module-container').click(function() {
       console.log('check');
        var videolink = $(this).find('#metavalll').attr('data-popup-video');
        if(videolink!==''){
            $(this).lightGallery({
                youtubePlayerParams: {
                    autoplay: 1,
                    controls: 1
                },
                dynamic: true,
                dynamicEl: [{"src": videolink}]
            });
        }    
    });
}
});
  • Вопрос задан
  • 119 просмотров
Решения вопроса 1
liqrizz
@liqrizz Автор вопроса
лол
Просто поставил счетчик, если счетик больше одного то функция не выполняется и обнуляю через 10мс
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы
КРАФТТЕК Санкт-Петербург
от 60 000 до 80 000 ₽
Brightdata Тель-Авив
от 5 500 до 6 500 $
Rocket Брянск
от 60 000 до 100 000 ₽