Приятная во всех отношениях Тема «GeneratePress». Но возникла необходимость немного улучшить интерфейс. При вертикальном скролинге страницы, горизонтальное Меню должно оставаться в верхней части окна.
Решено было обойтись без Плагинов.
- В Дочернюю Тему, копируем файл: header.php из оригинальной Темы.
- Вносим изменения:
... стр.11
if( wp_is_mobile() ){
// Если это мобильное устройство
$Mobile = 1;
} else {
$Mobile = 0;
}
if ( is_user_logged_in() ) {
// Коррекция Липкого Меню, если Пользователь залогинен. (Ну не Пользователь, а Админ или типа того.)
$MenuBar_Correction = 1;
} else {
$MenuBar_Correction = 0;
}
... стр.28
<head>
...
</head>
<script>
// Делаем липкое Меню.
jQuery(document).ready(function(){
var Mobile = <?php echo $Mobile;?>;
var MenuBar_Correction = <?php echo $MenuBar_Correction;?>;
var stickyHeaderTop = jQuery('#site-navigation').offset().top;
var window_scrollTop;
var AdminBar_H = 0;
var AdminBar_Position;
var MaxWidth_Content = jQuery('#site-navigation').css('max-width');
MaxWidth_Content = parseInt(MaxWidth_Content, 10);
if (Mobile == 1) {
// Не используем Липучку для мобильных устройств, т.к. раскрытое меню может выйти за нижнюю границу экрана.
return;
}
// Реагируем на Скрол
jQuery(window).scroll(function(){
RepositionMenu ();
});
// Реагируем на Изменения размера экрана
jQuery(window).resize(function(){
RepositionMenu ();
});
function RepositionMenu () {
// Делаем Меню-Липучку, если есть на то условия.
window_scrollTop = jQuery(window).scrollTop();
if (MenuBar_Correction == 1) {
AdminBar_Position = jQuery('#wpadminbar').css('position');
if (AdminBar_Position == 'fixed') {
// Коррекция позиции Липкокого Меню, если Пользователь залогинен и AdminBar фиксирован (зависит от ширины).
AdminBar_H = jQuery('#wpadminbar').height();
}
}
var Top_Sticky = AdminBar_H + 'px';
if( window_scrollTop > stickyHeaderTop ) {
// Липучка ON
var Width_Menu = jQuery('#site-navigation').width();
if (Width_Menu < MaxWidth_Content) {
jQuery('#site-navigation').css({
position: 'fixed',
width: '100%',
top: Top_Sticky,
left: '0px'
});
} else {
jQuery('#site-navigation').css({
position: 'fixed',
width: '100%',
top: Top_Sticky,
left: 'calc((100% - ' + MaxWidth_Content + 'px)/2)'
});
}
} else {
// Липучка OFF
jQuery('#site-navigation').css({
position: 'relative',
left: '0px',
top: '0px'
});
}
}
});
</script>
Собственно говоря, на этом все.
В результате, у нас получается следующее: Как только начинаем прокручивать страницу вниз, и горизонтальное Меню доходит до верхней части окна, то оно — это Меню прилипает и остается на своем месте при дальнейшей прокрутке.
Прокручивая страницу вверх, как только мы достигаем позиции изначального расположения горизонтального Меню, то оно снова отлипает и двигается вместе с контентом страницы.
Предложенный вариант отлично справляется с ситуацией, когда ширина контента ограничена и окно может быть и шире и уже заданных ограничений.
Для мобильных устройств (не путать с просто узким экраном, вручную сдвинутым), поведение иное. Скрипт просто отключается и Меню ведет себя как обычно.
Это сделано для того, чтобы избежать ситуаций, когда количество пунктов и под-пунктов в Меню при его раскрытии превышает размер экрана (как правило в горизонтальном расположении) и пользоваться таким интерфейсом становится неудобно.






Обсуждение закрыто.
You can send Email to: [email protected]