пытаясь держать что-то сухим - PullRequest
0 голосов
/ 24 сентября 2018

Я написал некоторый javascript, который создает массив объектов, а затем выполняет некоторые действия над этим массивом.На данный момент, каждый раз, когда я хочу использовать его, мне нужно заново заполнить массив, а затем запустить две другие функции.Вот мое использование:

queue_obj.build_queue_object($('.section_pane.visible .queue_list .post_row:not(.hidden)'))
.initialise_queue_view()
.add_event_listeners();

Мне приходится писать этот код по всей моей кодовой базе, что не идеально.Можно ли изменить это, чтобы я мог использовать его из одного места.

т.е. инициализировать данные один раз.Если он изменяется, повторно инициализируйте его или обновите.

Ниже приведен полный код:

$.fn.isInViewport = function() {
    var elementTop = $(this).offset().top;
    var elementBottom = elementTop + $(this).outerHeight();

    var viewportTop = $(window).scrollTop();
    var viewportBottom = viewportTop + $(window).height();

    return elementBottom > viewportTop && elementTop < viewportBottom;
};

var queue_obj = {
    'items' : [],
    build_queue_object : function(posts) {
        $(window).off('scroll resize');
        this.items = [];
        var that = this;
        $(posts).each(function(i, el){
            that.items[i] = {
                element : $(this),
                child_element : $(this).find('.post_row_inner')
            }
        });

        return this;
    },

    initialise_queue_view : function() {
        this.items.forEach(function(obj, i){
            if(obj.element.isInViewport())
            {
                obj.child_element.removeClass('pagination_hidden');
            }
            else
            {
                obj.child_element.addClass('pagination_hidden');
            }
        });

        return this;
    },

    add_event_listeners : function() {
        var that = this;
        $(window).on('scroll resize', function(){
            that.initialise_queue_view();
        });
    }
};
...