0

私は Swup js の新規ユーザーです。JS の読み込みに関する問題の調査とテストにほぼ 2 日かかりました。Swup JS を使用して Web サイトに Preload JS Plugin を実装しようとしています。特定のページに 1 つの要素を固定する必要があります。ページを更新すると機能しますが、ページを変更してから戻ってくると、Preload JS が要素の JS を認識していないようです。ピン留めは、ページを更新した場合にのみ機能します。Swup js Repo ですでに多くの問題が発生しています。しかし、私の問題はまだそこにあります。

let options = {
    linkSelector: '.nav-list a:not([data-no-swup]) , a:not([data-no-swup])',
    animateHistoryBrowsing: true,
    animationSelector: '[class*="transition-"]',
    containers: ['#maan-dynamic-content', '#maan-dynamic-footer', '#maan-dynamic-menu'],
    plugins: [
      new SwupPreloadPlugin(),
      new SwupOverlayTheme({
        color: '#F88808',
        duration: 600,
        direction: 'to-right',
      })
    ],
  };

  init();

  const swup = new Swup(options);

  swup.on('contentReplaced', init);
  swup.on('willReplaceContent', unload);

関数初期化

function init() {
// init Isotope
    if (document.querySelectorAll('.grid').length) {
      var $grid = $('.grid').isotope({
        itemSelector: '.grid-item',
        gutter: 30
    });

      // store filter for each group
      var filters = {};

      $('.filters').on('change', function (event) {
        var $select = $(event.target);
        // get group key
        var filterGroup = $select.attr('value-group');
        // set filter for group
        filters[filterGroup] = event.target.value;
        // combine filters
        var filterValue = concatValues(filters);
        // set filter for Isotope
        $grid.isotope({ filter: filterValue });
      });

      // flatten object by concatting values
      function concatValues(obj) {
        var value = '';
        for (var prop in obj) {
          value += obj[prop];
        }
        return value;
      }

      //****************************
      // Isotope Load more button
      //****************************
      var initShow = 6; //number of items loaded on init & onclick load more button
      var counter = 3; //counter for load more button
      var iso = $grid.data('isotope'); // get Isotope instance

      loadMore(initShow); //execute function onload

      function loadMore(toShow) {
        $grid.find(".hidden").removeClass("hidden");

        var hiddenElems = iso.filteredItems.slice(toShow, iso.filteredItems.length).map(function (item) {
          return item.element;
        });
        $(hiddenElems).addClass('hidden');
        $grid.isotope('layout');

        //when no more to load, hide show more button
        if (hiddenElems.length == 0) {
          jQuery("#load-more").hide();
        } else {
          jQuery("#load-more").show();
        };

      }

      //append load more button
      // $grid.after('<button class="" id="load-more"> Load More</button>');

      //when load more button clicked
      $("#load-more").click(function () {
        if ($('#filters').data('clicked')) {
          //when filter button clicked, set initial value for counter
          counter = initShow;
          $('#filters').data('clicked', false);
        } else {
          counter = counter;
        };

        counter = counter + initShow;

        loadMore(counter);
      });

      //when filter button clicked
      $("#filters").click(function () {
        $(this).data('clicked', true);

        loadMore(initShow);
      });
    }
}
document.addEventListener('DOMContentLoaded', init); 

しかしコンソールログ

TypeError: $(...).isotope is not a function
    init http://localhost:8848/assets/js/main.js:73
    e http://localhost:8848/assets/js/swup.min.js:1
    e http://localhost:8848/assets/js/swup.min.js:1
    e http://localhost:8848/assets/js/swup.min.js:1
    e http://localhost:8848/assets/js/swup.min.js:1

ページをリロードすると、コンソール エラーがなくなりました。

ご協力いただきありがとうございます。

4

0 に答える 0