Pjax-анимации

Наконец-то я заработал pjax, но у меня есть еще один вопрос. Как мне добавить некоторую анимацию jquery, такую ​​как исчезновение/продвижение старого контента и исчезновение/продвижение нового контента?

По умолчанию pjax просто изменяет содержимое без каких-либо красивых эффектов.

Любая помощь приветствуется.

С уважением


person Maja Jelen    schedule 06.03.2012    source источник


Ответы (3)


По сути, у вас есть куча событий, к которым можно привязаться и делать по своему усмотрению. Вот базовая версия fadeIn и fadeOut, использующая pjax:start и pjax:end в качестве триггеров.

$(document)
  .on('pjax:start', function() { $('#main').fadeOut(200); })
  .on('pjax:end',   function() { $('#main').fadeIn(200); })

Очевидно, вы бы заменили #main на элемент контейнера, в который и из которого вы меняете содержимое.

person Marcel    schedule 01.06.2012
comment
На моем сайте не работает stackoverflow.com/questions/ 17464641/ . Пожалуйста помоги - person Erma Isabel; 04.07.2013
comment
Вы можете получить лучший результат, изменив pjax:end на pjax:complete и разное время для постепенного появления и исчезновения, чтобы избежать мерцания контента. - person ctf0; 20.06.2016

Допустим, вы хотите создать обозреватель каталогов, как GitHub.

Давайте начнем с карусели Twitter Bootstrap и создадим представление с разметкой для ее использования (надеюсь, вы не возражаете против хамла):

Вот контейнер:

%div#uber-glider.glider.carousel.span12
  %div.carousel-inner
    = yield
%div#uber-glider-stage.glider-stage(style="display:none")

И вот пример партиала для рендеринга содержимого pjaxed внутри него:

%div.glider-group.item
  %div.glider-heading(data-title="#{@super_department.name} Super Department" data-resource="#{super_department_path @super_department.id}")
    %ul.breadcrumb
      %li
        %a.glider-link(href="#{divisions_path}")= "Divisions"
        %span.divider= "/"
      %li.active
        %a.glider-link(href="#{division_path @division.id}")= @division.name
        %span.divider= "/"
      %li.active
        = @super_department.name
  %div.glider-body
    - @super_department.departments.each_with_index do |department, i|
      %div.glider-listing
        %a.glider-link(data-glide="descend" data-target="#uber-glider" href="#{department_path department.id}")
          = department.name

Теперь давайте создадим Javascript с помощью pjax:

(function($){
    "use strict";

  $(function() {
    $('#uber-glider-stage').on('pjax:success', function(e){
      var $incoming_group = $('#uber-glider-stage .glider-group')
        , $incoming_heading = $('#uber-glider-stage .glider-heading')
        , incoming_resource = $incoming_heading.data('resource')
        , $existing_groups = $('#uber-glider .glider-group')
        , $existing_headings = $('#uber-glider .glider-heading')
        , existing_last_idx = $existing_groups.length - 1
        , matching_idx = -1;
      $existing_headings.each(function(idx) {
        if ($(this).data('resource') === incoming_resource) {
          matching_idx = idx;
        }
      });
      if (matching_idx > -1) {
        // pop                        
        $incoming_group.remove();
        $('#uber-glider').one('slid', function() {
          for (; existing_last_idx > matching_idx; existing_last_idx--) {
            $('#uber-glider .glider-group').last().remove();
          }
        });
        $('#uber-glider').carousel(matching_idx);
      }
      else {
        // push        
        debug.debug("pushing 1 level");
        $incoming_group.detach();
        var $container = $('#uber-glider > .carousel-inner');
        $container.append($incoming_group);
        $('#uber-glider').carousel('next');
      }
    });


    $('.glider-link').pjax('#uber-glider-stage', { 'timeout' : '3000' }).on('click', function(){
      debug.debug(".glider-link click");
    });
  });

  $('#uber-glider .carousel-inner .item').addClass('active');
  $('#uber-glider').carousel('pause');
})(window.jQuery);
person Mark Paine    schedule 13.03.2012
comment
Вам не нужно использовать %div.cssClass для ‹div›s в HAML, просто используйте .cssClass (тег по умолчанию — DIV :) ) - person MegaTux; 06.09.2013

Я предполагаю, что индикатор загрузки и анимация более или менее одно и то же. В этом случае используйте события pjax:send и pjax:complete.

Из файла сведений о pjax,

send и complete — хорошая пара событий для использования, если вы реализуете индикатор загрузки. Они будут срабатывать только в том случае, если будет сделан фактический запрос, а не если он загружен из кеша.

person MegaTux    schedule 06.09.2013