Получение smoothState.js и Foundation 6 для совместной работы

Я работаю над проектом Foundation 6 и пытаюсь заставить его работать с smoothState.js.

Мне удалось заставить smoothState работать, но теперь Foundation кажется сломанным. В частности, страница загружается правильно, когда вы впервые загружаете ее или нажимаете кнопку перезагрузки, но щелчок по ссылкам для навигации, похоже, нарушает макет. Я предполагаю, что это потому, что $(document).foundation(); запускается только при загрузке страницы.

Я попытался последовать более общему совету для плагинов js, например, " Повторная инициализация сценариев страницы после изменения страницы SmoothState.Js", и я попытался https://gist.github.com/miguel-perez/476046a42d229251fec3, но ни одна из них не решила мою проблему. $(document).foundation('reflow'); тоже не работает. Я застрял!

Такое чувство, что я что-то упустил, так как я неофит.

Во всяком случае, вот с чем я работаю:

$(document).foundation();

$(function() {
  'use strict';
  var $page = $('#main'),
    options = {
      debug: true,
      prefetch: true,
      cacheLength: 2,
      onStart: {
        duration: 0, // Duration of our animation, was 250
        render: function($container) {
          // Add your CSS animation reversing class
          $container.addClass('is-exiting');
          // Restart your animation
          smoothState.restartCSSAnimations();
        }
      },
      onReady: {
        duration: 0,
        render: function($container, $newContent) {
          // Remove your CSS animation reversing class
          //            $container.removeClass('is-exiting');
          // Inject the new content
          $container.html($newContent);
        }
      },
      onAfter: function($container) {
        $container.removeClass('is-exiting');
        console.log('after');
        $(document).foundation();
      },
    },
    smoothState = $page.smoothState(options).data('smoothState');
});

Любая помощь приветствуется! Я опубликовал это на странице GitHub smoothState.js в разделе "Проблемы".

Спасибо!

РЕДАКТИРОВАТЬ

Итак, я попробовал несколько фрагментов из документации Foundation, и у меня есть кое-что, что работает наполовину.

Файл smoothState.js ниже перезагружает Foundation и исправляет макет, но рассматриваемый плагин, Sticky, Foundation не сбрасывается (т.е. не становится липким). Даже при входе $('.sticky').foundation('_calc', true); в консоли исправляет плагин на 100%, добавляя эту же строку в smoothState.js только половина исправляет проблему. Ошибок тоже нет.

Так близко и в то же время так далеко! Что мне не хватает?:)

// @codekit-prepend "jquery.smoothState.min.js";

$(document).foundation();

$(function () {
    'use strict';
    var $page = $('#main'),
        options = {
            debug: true,
            prefetch: true,
            cacheLength: 4,
            onStart: {
                duration: 0, // Duration of our animation, was 250
                render: function ($container) {
                    // Add your CSS animation reversing class
                    $container.addClass('is-exiting');
                    // Restart your animation
                    smoothState.restartCSSAnimations();
                    // alert('end of start');
                }
            },
            onReady: {
                duration: 0,
                render: function ($container, $newContent) {
                    $container.html($newContent);
                    // alert('end of ready');
                    // console.log('Ready');
                }
            },
            onAfter: function ($container) {

                $container.removeClass('is-exiting');
                $(document).foundation();
                $('.sticky').foundation('_calc', true);
                // $('.sticky').foundation('_calc', true);
                // alert('end of onAfter');
                // console.log('onAfter');
            },
        },
        smoothState = $page.smoothState(options).data('smoothState');
}); 

ПОСЛЕДНИЕ РЕДАКТИРОВАТЬ

Добавление $(window).trigger('load'); предлагается в качестве обходного пути здесь, кажется, работает. Не могу не задаться вопросом, есть ли лучшее решение?

1 ответ

Я наткнулся на ваш вопрос несколько дней назад, когда сам искал ответы. Я заставил его работать на моем текущем сайте, и, так как ваш вопрос был опубликован в марте, надеюсь, вы уже нашли ответ.

На всякий случай, если вы не нашли его, вот мой ответ.

Вы можете инициализировать фундамент в функции onSfter сглаживания.

//PAGE TRANSITIONS WITH SMOOTHSTATE
$(function(){
'use strict';
var $page = $('#main'),
  options = {
    debug: true,
    blacklist : $('.photogallery a'),
    prefetch: true,
    cacheLength: 2,
    onStart: {
      duration: 250, // Duration of our animation
      render: function ($container) {
        // Add your CSS animation reversing class
        $container.addClass('is-exiting');
        // Restart your animation
        smoothState.restartCSSAnimations();
      }
    },
    onReady: {
      duration: 0,
      render: function ($container, $newContent) {
        // Remove your CSS animation reversing class
        $container.removeClass('is-exiting');
        // Inject the new content
        $container.html($newContent);
        // $container.onPageLoad();
      }
    },
    onAfter: function($container) {
        $(document).foundation();
// This is where you initialize foundation
        $container.onPageLoad(); // all other scripts inside this function          
    }
  },
  smoothState = $page.smoothState(options).data('smoothState');  

});
Другие вопросы по тегам