serii81
@serii81
Я люблю phр...

Почему при ресайзе окна браузера, не учитываются его размеры?

Объясню, что имею в виду.
У меня есть меню, которое складывается.
Оно нестандартное и состоит из двух частей.
На экранах до 1140px при скролле должна показываться одно меню, на меньшем - другая часть.

Я создал две функции
Первая
function forMobile(){
        $('body').css('padding-top', 100);
        categoriesWrap.css('display', 'none');

        $(window).on('scroll', function(){
            console.log('mobile');
            if($(window).scrollTop() > headerMainHeight  + 10) {
                categoriesWrap.hide();
            }else if($(window).scrollTop() < headerMainHeight  + 10){
                headerMain.removeClass('fixed');
                categoriesWrap.hide();
            }

            if($(window).scrollTop() > headerMainHeight  + 100) {
                headerMain.addClass('fixed');
            }    
        });
    }


И вторая
function forDesktop(){
        
        categoriesWrap.css('display', 'block');

        $(window).on('scroll', function(){
            console.log('desktop');

            if($(window).scrollTop() < headerMainHeight  + 10){
                categoriesWrap.removeClass('fixed');
                categoriesWrap.css('display', 'block');
                categoriesWrap.css('opacity', 1);
            } 

            if($(window).scrollTop() > headerMainHeight  + 10) {
                categoriesWrap.css('opacity', 0);
                categoriesWrap.css('display', 'block');
            }

            if($(window).scrollTop() > headerMainHeight  + 100) {
                categoriesWrap.addClass('fixed');
                categoriesWrap.css('opacity', 1);
            }
        });
    }


И сам код
if($(window).width() < windowSize) {
        forMobile();
    } 

    if($(window).width() > windowSize){
        forDesktop();
    } 

    $(window).resize(function(){

        if($(window).width() < windowSize) {
            forMobile();
        }else{
            forDesktop();
        }
    });


Так вот, при открытии сайта в браузер скроллится меню, в соответствии с разрешением экрана.
А при ресайзе, когда перехожу за точку 1140 в ту или иную сторону, то на десктопе скроллится меню для телефона.
Я в каждую из функций прописал console.log('menu') и соответственно desktop

Вот ссылка на сайт site

При открытии браузера с разрешением до 1140 или за - в консоли выводиться только одно название из console.log()
Как только перехожу за рубикон, то выводится обе.
Как это можно объяснить.
Я уверен, что специалистам это очевидно.
Поделиться решением.
Заранее благодарен.
  • Вопрос задан
  • 249 просмотров
Решения вопроса 1
ProjectSoft
@ProjectSoft
Front-end && Back-end разработчик
Сергей Бурдужа, вы подписываете две функции на одно событие. С таким же успехом можно всё написать выше этих функций, а сами функции выкинуть. Так нельзя и не надо делать.

Нужно приблизительно так.
(Код ещё можно оптимизировать)
(function($){
	var windowSize = 1140,
		isDesktop = !($(window).width() < windowSize),
		$categoriesWrap = $('.categories-wrapper'),
		$headerMain = $('header'), // Скорее всего что-то типа так
		headerMainHeight = $headerMain.height(),
		scrollTop = $(window).scrollTop(),
		forDesktop = function(){
		
		!$categoriesWrap.is(":visible") && $categoriesWrap.css({'display': 'block'});
			
			scrollTop = $(window).scrollTop();
			
			if(scrollTop < headerMainHeight  + 10){
				$categoriesWrap.removeClass('fixed');
				$categoriesWrap.css('display', 'block');
				$categoriesWrap.css('opacity', 1);
			} 
			
			if(scrollTop > headerMainHeight  + 10) {
				$categoriesWrap.css('opacity', 0);
				$categoriesWrap.css('display', 'block');
			}
			
			if(scrollTop > headerMainHeight  + 100) {
				$categoriesWrap.addClass('fixed');
				$categoriesWrap.css('opacity', 1);
			}
		},
		forMobile = function(){
			
			$('body').css('padding-top', 100);
			
			$categoriesWrap.is(":visible") && $categoriesWrap.css({'display': 'none'});
			
			scrollTop = $(window).scrollTop();
			
			if(scrollTop > headerMainHeight  + 10) {
				$categoriesWrap.hide();
			}else if(scrollTop < headerMainHeight  + 10){
				headerMain.removeClass('fixed');
				$categoriesWrap.hide();
			}
			
			if(scrollTop > headerMainHeight  + 100) {
				headerMain.addClass('fixed');
			}
		};
	// Подписываемся на события
	$(window).on('resize scroll', function(e){
		isDesktop = !($(window).width() < windowSize);
		headerMainHeight = $headerMain.height();
		isDesktop ? forDesktop() : forMobile();
	});
	
	// Запустим
	isDesktop ? forDesktop() : forMobile();
	
}(jQuery));
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы