Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 29.07.2019, 13:24
Новичок на форуме
Отправить личное сообщение для andrey0881 Посмотреть профиль Найти все сообщения от andrey0881
 
Регистрация: 29.07.2019
Сообщений: 8

Некорректная работа on('click'...) с flex-direction
Привет. Такой вопрос (может кто-то сможет подсказать):
Интернет-магазин. Страницы категорий (сетка товаров и текстовое описание). Реализована Ajax-подгрузка товаров (при клике на кнопку под товарами).
Был запрос от SEO перенести тексты выше товаров с отображением под ними. Сделано было изменением порядка вывода в шаблоне с flex-direction: column-reverse.
Все вроде ок, но обратил внимание, что кнопка подгрузки стала работать не совсем корректно:
При клике на неё, когда она располагается ближе к нижней части экрана, все норм - новая порция товаров подгружается и юзер видит первый ряд этой новой порции
При клике кнопки, "отскроленной" от низа экрана пикселей на 200 и выше, юзер видит последний ряд новой порции, что неудобно, приходится скроллить вверх/искать начало порции.
Хз что с этим делать) Думаю, что из-за смены порядка отображения элементов флексом у браузера трабл с рассчетом координат кнопки, т.е. когда она в центре экрана, он видимо считает, что её верхняя граница достигла верхнего края экрана.
Может быть кто-то сталкивался с подобным) поделитесь опытом, как разрулить
Ответить с цитированием
  #2 (permalink)  
Старый 29.07.2019, 13:45
Аватар для Malleys
Профессор
Отправить личное сообщение для Malleys Посмотреть профиль Найти все сообщения от Malleys
 
Регистрация: 20.12.2009
Сообщений: 1,714

Сообщение от andrey0881
При клике на неё, когда она располагается ближе к нижней части экрана, все норм - новая порция товаров подгружается и юзер видит первый ряд этой новой порции
При клике кнопки, "отскроленной" от низа экрана пикселей на 200 и выше, юзер видит последний ряд новой порции, что неудобно, приходится скроллить вверх/искать начало порции.
А как у вас выглядит разметка?
Ответить с цитированием
  #3 (permalink)  
Старый 29.07.2019, 14:07
Новичок на форуме
Отправить личное сообщение для andrey0881 Посмотреть профиль Найти все сообщения от andrey0881
 
Регистрация: 29.07.2019
Сообщений: 8

https://dvernoyolimp.com.ua/mezhkomnatnyie-dveri/
Ответить с цитированием
  #4 (permalink)  
Старый 29.07.2019, 14:46
Аватар для Malleys
Профессор
Отправить личное сообщение для Malleys Посмотреть профиль Найти все сообщения от Malleys
 
Регистрация: 20.12.2009
Сообщений: 1,714

andrey0881, при нажатии на кнопку у вас загружается, и вставляется код с товарами в страницу.

Перед тем как вставлять, надо применить стиль
.products-wrapper {
	margin-bottom: 100vh;
}
Затем установить таймер на 1мс, и вставить код с товарами в страницу. Затем можно удалить стиль.
Ответить с цитированием
  #5 (permalink)  
Старый 31.07.2019, 12:25
Новичок на форуме
Отправить личное сообщение для andrey0881 Посмотреть профиль Найти все сообщения от andrey0881
 
Регистрация: 29.07.2019
Сообщений: 8

Спасибо)
такое, не совсем что-то

загрузку товаров не трогаю
просто перед этим старым кодом добавил addClass для .products-wrapper
весь код загрузки/вставки товаров - в setTimeout с 1мс задержки
ну и после removeClass как просто, так и со своим setTimeout

в итоге результат, по сути, тот же
что-то похожее на то, что нужно, если не удаляю класс, но, естественно, пустая простыня, да и на первом клике все равно не совсем так - на экране место добавляемого маржина, а не товары (последующие клики, как и нужно (если не считать "простыни" ) - остаемся на первом ряду новой порции товаров)

Было ощущение, что товары не успевают подгружаться до удаления класса, для эксперимента выставил паузу 5сек для удаления - успевают подгрузиться, но все-таки без нужного отображения
Ответить с цитированием
  #6 (permalink)  
Старый 31.07.2019, 12:40
Новичок на форуме
Отправить личное сообщение для andrey0881 Посмотреть профиль Найти все сообщения от andrey0881
 
Регистрация: 29.07.2019
Сообщений: 8

почему, подгрузка товаров происходит
Ответить с цитированием
  #7 (permalink)  
Старый 31.07.2019, 12:49
Новичок на форуме
Отправить личное сообщение для andrey0881 Посмотреть профиль Найти все сообщения от andrey0881
 
Регистрация: 29.07.2019
Сообщений: 8

да, с онклик на кнопке игрался (оставалась ссылка на закомментированную productsWrapper) -убрал
Ответить с цитированием
  #8 (permalink)  
Старый 31.07.2019, 12:55
Новичок на форуме
Отправить личное сообщение для andrey0881 Посмотреть профиль Найти все сообщения от andrey0881
 
Регистрация: 29.07.2019
Сообщений: 8

$(function () {
    var moreDoorsContent = $(".bx_catalog_list_home"),
        allContent = $(".content"),
        btnDoors = allContent.find(".more_button"),
        currentPageDoors = btnDoors.data("currentpage");

    $(document).on('click', '.more_button', function (e) {
        //e.preventDefault();
        $('.products-wrapper').addClass("add-margin");
        
        setTimeout(function() { 
            var allDoors = btnDoors.data("allcount"),
                doorsOnOnePage = btnDoors.data("size");
    
            console.log(currentPageDoors);
            $.ajax({
                url: window.location.href,
                type: "get",
                data: {
                    PAGEN_1: ++currentPageDoors
                },
                complete: function () {
                    if (currentPageDoors * doorsOnOnePage >= allDoors) {
                        allContent.find('.btn__tab_line').hide();
                    }
                },
                success: function (data) {
    
                    console.log(window.location.href);
    
                    //allContent.find(".more_button").parents('.btn__tab_line').remove();
                    
                    moreDoorsContent.append($(data).find('.bx_catalog_list_home').html());
                    $(".nktl_pagination_wrp").html($(data).find('.nktl_pagination_wrp').html());
    
                    moreDoorsContent.find('div[style*="clear: both"]').remove();
                    console.log(moreDoorsContent.find('div[style*="clear: both"]:first-child'))
    
                    moreDoorsContent.append('<div style="clear: both"></div>')
    
                },
                error: function (data) {
                    console.log('error');
                }
            });
            //$('.products-wrapper').removeClass("add-margin");
        }, 1);
        setTimeout(function() { $('.products-wrapper').removeClass("add-margin") }, 1);
        
        
    });
});


вот так все выглядит, забрал кусок из main.js в отдельный файл для удобства, добавил пару строк с добавлением/удалением класса и тайм-аутом
Ответить с цитированием
  #9 (permalink)  
Старый 31.07.2019, 13:21
Аватар для Malleys
Профессор
Отправить личное сообщение для Malleys Посмотреть профиль Найти все сообщения от Malleys
 
Регистрация: 20.12.2009
Сообщений: 1,714

Да, вариант с margin-bottom: 100vh; что-то не совсем так работает в вашем случае!

Вот с сокрытием $('.category_description_content') на время вставки...

$(function() {
	var moreDoorsContent = $(".bx_catalog_list_home")
	  , allContent = $(".content")
	  , btnDoors = allContent.find(".more_button")
	  , currentPageDoors = btnDoors.data("currentpage");

	$(document).on('click', '.more_button', function(e) {
		var allDoors = btnDoors.data("allcount")
		  , doorsOnOnePage = btnDoors.data("size");

		$.ajax({
			url: window.location.href,
			type: "get",
			data: {
				PAGEN_1: ++currentPageDoors
			},
			complete: function() {
				if (currentPageDoors * doorsOnOnePage >= allDoors) {
					allContent.find('.btn__tab_line').hide();
				}
			},
			success: function(data) {
				$('.category_description_content').hide();
				
				setTimeout(function() {
					moreDoorsContent.append($(data).find('.bx_catalog_list_home').html());
					$(".nktl_pagination_wrp").html($(data).find('.nktl_pagination_wrp').html());
					moreDoorsContent.find('div[style*="clear: both"]').remove();
					moreDoorsContent.append('<div style="clear: both"></div>');
					
					$('.category_description_content').show();
				}, 1);

			},
			error: function(data) {
				console.log('error');
			}
		});
	});
});
Ответить с цитированием
  #10 (permalink)  
Старый 31.07.2019, 15:47
Новичок на форуме
Отправить личное сообщение для andrey0881 Посмотреть профиль Найти все сообщения от andrey0881
 
Регистрация: 29.07.2019
Сообщений: 8

да, в целом идея верная
спасибо)
правда не пойму почему хайд срабатывает через раз, а то и 3-4
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Некорректная работа функции PolarWolf1 Элементы интерфейса 1 22.11.2017 03:21
Gulp / browser-sync некорректная работа вочера Black_Star Сборка проекта, утилиты 0 16.04.2017 15:45
Некорректная работа get(set)Attribute в IE для элементов img back to back Internet Explorer 15 09.06.2012 16:52
Некорректная работа slideUp и slideDown vuler jQuery 4 25.04.2012 00:31
Некорректная работа ф-ции Dimonya Events/DOM/Window 7 15.04.2010 14:12