Guest User

Ajax_product_load.js

a guest
Oct 27th, 2020
115
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. document.addEventListener("DOMContentLoaded", function(event) {
  2.  
  3.  
  4.  
  5. var pagination_exist = true; // оставить пагинацию и добавить кнопку
  6. var button_more = true; // true наличие кнопки "загрузить ещё" false - автозагрузка при прокрутке в конец страницы
  7. var arrow_top = true;// - выводить стрелочку "вверх"
  8.  
  9. var button_more_html = '<div class="text-center"><a href="#" class="load_more">Загрузить ешё</a></div>';
  10. var button_more_style = '<style>a.load_more {display:inline-block; margin:0 auto 20px auto; padding: 0.5em 2em; border: 1px solid #069; border-radius: 5px; text-decoration:none; text-transform:uppercase;}</style>';
  11. var arrow_top_html = '<a id="arrow_top" style="display:none;" onclick="scroll_to_top();"></a>';
  12. var additional_style = '<style>\
  13. #ajax_loader{width:100%;height:30px;margin-top:15px;text-align:center;border:none!important;}\
  14. #arrow_top{background: url("/image/chevron_up.png") no-repeat transparent;background-size: cover;position: fixed;bottom: 50px;right: 15px;cursor: pointer;height: 50px;width: 50px;}\
  15. </style>';
  16. $('head').append(additional_style);
  17.  
  18. var top_offset = 100; // высота отступа от верха окна, запускающего arrow_top
  19. var window_height = 0; // высота окна
  20. var product_block_offset = 0; // отступ от верха окна блока, содержащего контейнеры
  21.  
  22. var product_block = '.catalog'; // определяет div, содержащий товары
  23. var pages_count = {}; // счетчик массива ссылок пагинации
  24.  
  25. var pages = []; // массив для ссылок пагинации
  26. var waiting = false;
  27.  
  28. function getNextProductPage(pages, pages_count) {
  29.     if (waiting) return;
  30.     if (pages_count.val >= pages.length) return;
  31.     waiting = true;
  32.     $(product_block).parent().after('<div id="ajax_loader"><img src="/image/ajax-loader-horizontal.gif" /></div>');
  33.     $.ajax({
  34.         url:pages[pages_count.val],
  35.         type:"GET",
  36.         data:'',
  37.         success:function (data) {
  38.             $data = $(data);
  39.             $('#ajax_loader').remove();
  40.             if ($data) {        
  41.                 if ($data.find('.catalog').length > 0) {
  42.                     $(product_block).parent().append($data.find('.catalog').parent().html());
  43.                     if (product_block == '.catalog') {
  44.                         $('#grid-view').trigger('click')};
  45.                     } else {
  46.                         $(product_block).parent().append($data.find('.catalog').parent().html());
  47.                         if (product_block == '.catalog') {$('#list-view').trigger('click')};
  48.                     }
  49.                     if (pagination_exist) {
  50.                         $('.pagination').html($data.find('.pagination'));
  51.                     }
  52.                 }
  53.                 waiting = false;
  54.             }
  55.     });
  56.     if (pages_count.val + 1 >= pages.length) { $('.load_more').hide(); };
  57.     pages_count.val++;
  58. }
  59.  
  60. function getProductBlock() {
  61.     if ($('.catalog').length > 0) {
  62.         product_block = '.catalog';
  63.     } else {
  64.         product_block = '.catalog';
  65.     }
  66.     return product_block;
  67. }
  68.  
  69. window.scroll_to_top = function () {
  70.     $('html, body').animate({
  71.         scrollTop: 0
  72.     }, 300, function() {
  73.         $('.arrow_top').remove();
  74.     });  
  75. }
  76.  
  77.     window_height = $(window).height();
  78.     product_block = getProductBlock();
  79.     var button_more_block = button_more_style + button_more_html;
  80.  
  81.     if(arrow_top) {$('body').append(arrow_top_html); arrow_top = $('#arrow_top'); }
  82.  
  83.     if ($(product_block).length > 0) {
  84.         product_block_offset = $(product_block).offset().top;
  85.     var href = $('.pagination').find('li:last a').attr('href');
  86.         $('.pagination').each(function(){
  87.             if (href) {
  88.                 TotalPages = href.substring(href.indexOf("page=")+5);
  89.                 First_index = $(this).find('li.active span').html();
  90.                 i = parseInt(First_index) + 1;
  91.                 while (i <= TotalPages) {
  92.                     pages.push(href.substring(0,href.indexOf("page=")+5) + i);
  93.                     i++;
  94.                 }
  95.             }      
  96.         });
  97.         $(window).scroll(function(){
  98.             if (arrow_top) {
  99.                 if ($(document).scrollTop() > top_offset) {
  100.                     $('#arrow_top').show();
  101.                 } else {
  102.                     $('#arrow_top').hide();
  103.                 }
  104.             }
  105.         });
  106.         if (button_more && href) {
  107.             $('.pagination').parent().before(button_more_block);
  108.             if (!pagination_exist) {
  109.                 $('.pagination').parent().remove();
  110.             } else {
  111.                 $('.pagination').parent().find('.text-right').remove();
  112.             }
  113.             $('.load_more').click( function(event) {
  114.                 event.preventDefault();
  115.                 getNextProductPage(pages, pages_count);
  116.             });
  117.         } else if (href) {
  118.             $('.pagination').parent().hide();
  119.             $(window).scroll(function(){
  120.                 product_block = getProductBlock();
  121.                 product_block_height = $(product_block).parent().height();
  122.                 if (pages.length > 0) {
  123.                     if((product_block_offset+product_block_height-window_height)<($(this).scrollTop())){
  124.                         getNextProductPage(pages, pages_count);
  125.                     }
  126.                 }
  127.             });
  128.         }
  129.     }
  130. });
Advertisement
Add Comment
Please, Sign In to add comment