Drupal.attachBehaviours с бесконечной прокруткой jQuery и кирпичной кладкой - PullRequest
0 голосов
/ 10 февраля 2012

Я немного отчаялся здесь. Я читал все, что смог найти на Drupal.behaviours, но, очевидно, его все еще недостаточно. Я пытаюсь запустить сетку кладки с плагином infinitescroll, чтобы прикрепить новые изображения к кладке. Это работает отлично до сих пор. Следующее, что я хотел реализовать на своем веб-сайте, это эффект наведения (который показывает информацию на изображениях), а затем и fancybox, чтобы показывать изображения в огромном размере.

(function ($) {
    Drupal.behaviors.views_fluidgrid = {
        attach: function (context) {
            $('.views-fluidgrid-wrapper:not(.views-fluidgrid-processed)', context).addClass('views-fluidgrid-processed').each(function () {
                // hide items while loading
                var $this = $(this).css({opacity: 0}),      
                id = $(this).attr('id'),
                settings = Drupal.settings.viewsFluidGrid[id];

                $this.imagesLoaded(function() {
                    // show items after .imagesLoaded()
                    $this.animate({opacity: 1});
                    $this.masonry({
                        //the masonry settings
                    });
                });

                //implement the function of jquery.infinitescroll.min.js
                $this.infinitescroll({
                    //the infinitescroll settings
                },

                //show new items and attach behaviours in callback
                function(newElems) {
                    var newItems = $(newElems).css({opacity: 0});
                    $(newItems).imagesLoaded(function() {
                        $(newItems).animate({opacity: 1});
                        $this.masonry('appended', newItems);
                        Drupal.attachBehaviours(newItems);
                    });
                });

            });
        }
    };
})(jQuery);

Теперь я прочитал, что мне нужно заново подключить Drupal.behaviours, если я хочу, чтобы событие hover также происходило с недавно добавленным контентом.

(function ($) {
    Drupal.behaviors.imgOverlay = {
        attach: function (context) {
            var timeout;
            $('.img_gallery').hover(function() {
                $this = $(this);
                timeout = setTimeout(change_opacity, 500);
                }, reset_opacity);

            function change_opacity() {
                //set opacity to show the desired elements
            }

            function reset_opacity() {
                clearTimeout(timeout);
                //reset opacity to 0 on desired elements
            }
        }
    };
})(jQuery)

Где мне теперь написать Drupal.attachBehaviours (), чтобы заставить его работать на самом деле? Или есть какая-то другая ошибка, которую я просто не вижу? Надеюсь, я написал вопрос так, чтобы он был понятен и, возможно, он также помог кому-то еще, поскольку я обнаружил, что в drupal 7 не существует настоящей «официальной» рабочей версии этой комбинации.

1 Ответ

1 голос
/ 12 февраля 2012

Хорошо, решение на самом деле довольно простое. При правильной записи, чем это также работает. Конечно, не Drupal.attachBehaviours(), а Drupal.attachBehaviors(). Таким образом, эта комбинация теперь работает, и я, наконец, с облегчением

...