Я написал некоторый 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();
});
}
};