Skip to content

Instantly share code, notes, and snippets.

@amorkovin
Created January 23, 2020 13:13
Show Gist options
  • Save amorkovin/1deba3fb3bd7769fa1190c3aa2232132 to your computer and use it in GitHub Desktop.
Save amorkovin/1deba3fb3bd7769fa1190c3aa2232132 to your computer and use it in GitHub Desktop.
Изменение положения мобильного меню при прокрутке
//Меняю положение мобильного меню при прокрутке
function man_mobile_menu_position( mobile_menu ) {
const rect_menu = mobile_menu.getBoundingClientRect();
const rect_footer = document.querySelector('.footer').getBoundingClientRect();
const rect_header = document.querySelector('.header').getBoundingClientRect();
//Если сверху прокручено меньше чем высота шапки, то убрать фиксацию мобильного меню.
if ( window.pageYOffset <= rect_header.height ) {
if ( mobile_menu.classList.contains('fixed') ) {
mobile_menu.classList.remove('fixed');
mobile_menu.style.top = rect_header.height + 'px';
}
} else {
//Иначе мобильное меню должно быть зафиксировано.
if ( ! mobile_menu.classList.contains('fixed') ) {
mobile_menu.classList.add('fixed');
mobile_menu.style.top = 0;
mobile_menu.style.bottom = 'auto';
}
//Если мобильное меню зафиксировано и уперлось в подвал своей нижней частью, то меню ниже не опускать.
let difference_height = rect_footer.y - rect_menu.height;
if ( mobile_menu.classList.contains('fixed') && difference_height <= 0 ) {
mobile_menu.style.top = difference_height + 'px';
} else {
//Если мобильное меню зафиксировано и не умещается его верхняя часть, при этом его нижняя часть отошла от подвала — нужно начать прокрутку меню вверх.
// Прокрутка сверху должна быть больше 200 пксл, иначе мы будем попадать в данную ветку когда только начала прокручиваться и из-за рывка прокрутки не успели назначить нужный класс «fixed».
if ( rect_menu.y < 0 && window.pageYOffset > 200 ) {
mobile_menu.style.bottom = 0;
mobile_menu.style.top = 'auto';
}
if ( rect_menu.y >= 0 ) {
mobile_menu.style.top = 0;
mobile_menu.style.bottom = 'auto';
}
}
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment