Получение конфликта mootools и jQuery в сценарии LazyLoad - PullRequest
0 голосов
/ 11 ноября 2018

Итак, я пытаюсь использовать этот скрипт https://codepen.io/cjl750/pen/pEAmgR на своем веб-сайте.

    // LAZY LOAD FUNCTION
function lazyLoad() {
  $('iframe').each(function() {
    var frame = $(this),
        vidSource = $(frame).attr('data-src'),
        distance = $(frame).offset().top - $(window).scrollTop(),
        distTopBot = window.innerHeight - distance,
        distBotTop = distance + $(frame).height();

    if (distTopBot >= 0 && distBotTop >= 0) { // if frame is partly in view
      $(frame).attr('src', vidSource);
      $(frame).removeAttr('data-src');
    }
  });
}
var throttled = _.throttle(lazyLoad, 100);
$(window).scroll(throttled);


// ILLUSTRATION OF VARIABLES
// as calculated on div#example
function lazyLoadExample() {
  var frame = $('#example'),
      vidSource = $(frame).attr('data-src'),
      distance = $(frame).offset().top - $(window).scrollTop(),
      distTopBot = Math.round(window.innerHeight - distance), // distance from top of frame to bottom of viewport
      distBotTop = Math.round(distance + $(frame).height()); // distance from bottom of frame to top of viewport

  document.getElementById('stick1').innerHTML = "distBotTop: " + distBotTop;
  document.getElementById('stick2').innerHTML = "distTopBot: " + distTopBot;
}
var throttled = _.throttle(lazyLoadExample, 100);
$(window).scroll(throttled);

Но так как сайт обрабатывает как jQuery, так и Mootools, я получаю конфликт:

Uncaught TypeError: $ is not a function В зависимости от того, что я делаю, я даже получаю LazyLoad is not a function

Чтобы «исправить» это, я заменил каждые $ на jquery

Нравитсяэто:

// LAZY LOAD FUNCTION
function lazyLoad() {
  jQuery('iframe').each(function() {
    var frame = jQuery(this),
        vidSource = jQuery(frame).attr('data-src'),
        distance = jQuery(frame).offset().top - jQuery(window).scrollTop(),
        distTopBot = window.innerHeight - distance,
        distBotTop = distance + jQuery(frame).height();

    if (distTopBot >= 0 && distBotTop >= 0) { // if frame is partly in view
      jQuery(frame).attr('src', vidSource);
      jQuery(frame).removeAttr('data-src');
    }
  });
}
var throttled = _.throttle(lazyLoad, 100);
jQuery(window).scroll(throttled);


// ILLUSTRATION OF VARIABLES
// as calculated on div#example
function lazyLoadExample() {
  var frame = jQuery('#example'),
      vidSource = jQuery(frame).attr('data-src'),
      distance = jQuery(frame).offset().top - jQuery(window).scrollTop(),
      distTopBot = Math.round(window.innerHeight - distance), // distance from top of frame to bottom of viewport
      distBotTop = Math.round(distance + jQuery(frame).height()); // distance from bottom of frame to top of viewport

  document.getElementById('stick1').innerHTML = "distBotTop: " + distBotTop;
  document.getElementById('stick2').innerHTML = "distTopBot: " + distTopBot;
}
var throttled = _.throttle(lazyLoadExample, 100);
jQuery(window).scroll(throttled);

Но я знаю, что это не правильный способ исправить это.Пожалуйста, помогите.

Я даже пробовал что-то вроде jQuery(function lazyLoad(&) {});, не могу сделать.

Дополнительный javascript:

<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery.lazyload/1.9.1/jquery.lazyload.min.js"></script>

<script type="text/javascript" src="//cdnjs.cloudflare.com/ajax/libs/lodash.js/0.10.0/lodash.min.js"></script>

PS: Сценарий должен Lazy Loadплавающие фреймы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...