123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143 |
- (function($) {
- var target = null;
- var template = null;
- var lock = false;
- var is_stop = true;
- var cur_last = 0;
- var variables = {
- 'last': 0
- }
- var settings = {
- 'amount': '6',
- 'address': 'comments.php',
- 'format': 'json',
- 'template': '.single_item',
- 'trigger': '.get_more',
- 'scroll': 'false',
- 'offset': '100',
- 'spinner_code': ''
- }
- var methods = {
- init: function(options) {
- return this.each(function() {
- if (options) {
- $.extend(settings, options);
- }
- template = $(this).children(settings.template).wrap('<div/>').parent();
- template.css('display', 'none')
- $(this).append('<div class="more_loader_spinner">' + settings.spinner_code + '</div>')
-
- template.remove();
- target = $(this);
- if (settings.scroll == 'false') {
- $(this).find(settings.trigger).bind('click.more', methods.get_data);
- $(this).more('get_data');
- } else {
- if ($(this).height() <= $(this).attr('scrollHeight')) {
- target.more('get_data', settings.amount * 2);
- }
- $(this).bind('scroll.more', methods.check_scroll);
- }
- })
-
- },
- check_scroll: function() {
- if ((target.scrollTop() + target.height() + parseInt(settings.offset)) >= target.attr('scrollHeight') && lock == false) {
- target.more('get_data');
- }
- },
- debug: function() {
- var debug_string = '';
- $.each(variables, function(k, v) {
- debug_string += k + ' : ' + v + '\n';
- })
- alert(debug_string);
- },
- remove: function() {
- target.children(settings.trigger).unbind('.more');
- target.unbind('.more')
- target.children(settings.trigger).remove();
-
- },
- add_elements: function(data) {
- //alert('adding elements')
- var root = target
- // alert(root.attr('id'))
- var counter = 0;
- if (data) {
- $(data).each(function() {
- counter++
- var t = template
- $.each(this, function(key, value) {
- if (t.find('.' + key)) t.find('.' + key).html(value);
- })
- //t.attr('id', 'more_element_'+ (variables.last++))
- if (settings.scroll == 'true') {
- // root.append(t.html())
- root.children('.more_loader_spinner').before(t.html())
- } else {
- //alert('...')
- root.children(settings.trigger).before(t.html())
- }
- root.children(settings.template + ':last').attr('id', 'more_element_' + ((variables.last++) + 1));
- })
- } else methods.remove()
- target.children('.more_loader_spinner').css('display', 'none');
- if (counter < settings.amount) methods.remove()
- },
- get_data: function() {
- //alert('getting data')
- var ile;
- lock = true;
- target.children(".more_loader_spinner").css('display', 'block');
- $(settings.trigger).css('display', 'none');
- if (typeof(arguments[0]) == 'number') ile = arguments[0];
- else {
- ile = settings.amount;
- }
- if(variables.last >= cur_last){
- $.post(settings.address, {
- last: variables.last,
- amount: ile
- }, function(data) {
- $(settings.trigger).css('display', 'block')
- methods.add_elements(data)
- lock = false;
- }, settings.format)
- cur_last = cur_last+6;
- }
-
- }
- };
- $.fn.more = function(method) {
- if (methods[method]) {
- //load_flag = true;
- return methods[method].apply(this, Array.prototype.slice.call(arguments, 1));
- } else if (typeof method == 'object' || !method) {
- //load_flag = true;
- return methods.init.apply(this, arguments);
- } else $.error('Method ' + method + ' does not exist!');
- }
- $(window).scroll(function() {
- if (is_stop) {
- if ($(window).scrollTop() == $(document).height() - $(window).height() && is_stop == true) {
- is_stop == false;
- $('.get_more').click();
- is_stop == true;
- }
- }
- });
- })(jQuery)
|