Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 07.05.2015, 16:33
Аспирант
Отправить личное сообщение для vettel Посмотреть профиль Найти все сообщения от vettel
 
Регистрация: 07.05.2015
Сообщений: 43

Фиксирование и открепление вертикальной навигационной панели при прокрутке
Здравствуйте.
На странице есть вертикальная панель навигации. Оформленная там, разные эффекты при наведении и т.д.
Решил сделать так, что, когда страница прокручивается до начала панели, она(панель) прикрепляется. Для того, чтобы ее всегда было видно. С этим проблем не возникло.
Но потом решил добавить кода для тех, кто изменит размер окна или масштаб. Принцип такой: если длина окна меньше длины навигационной панели, никакого прикрепления происходить не должно.
Вот код:
$(document).ready(function() {
    navVerticalShift();
});
 
$(window).resize(function() {
        navVerticalShift();
});
 
function navVerticalShift() {
    $('nav').css('position', 'static');
    var screenHeight = $(window).height();
    var topNav = $('nav').offset().top;
    var $width = $('nav').width();
    var $height = $('nav').height();
    
    if (screenHeight < $height) {
            return;
        }
    else {    
    $(window).scroll(function() {
        if ($(document).scrollTop() > topNav) {
                $('nav').css({top: '1px', position: 'fixed', width: $width + 'px'});
            }
        else {
                $('nav').css({position: 'static'});
            }
    });
    }
}


Событие window.resize добавил для тех, кто изменит масштаб страницы в браузере без обновления.

Но код в принципе не работает. При обновлении страницы - да, работает: если окно маленькое, прикрепления не происходит, если большое - происходит. Но напрямик при изменении размеров окна или масштаба - нет. Точнее, если окно стало маленькое, а потом большое - то все работает (сначала панель не прикрепляется, а при большом окне - прикрепляется).

А если окно было большое и прикрепление сработало, а потом я сделал его маленьким (или увеличил масштаб) - панель все равно остается прикрепленной. То есть нижней части панели пользователь так и не увидит.
Хотелось бы понять, в чем я ошибся и что не так делаю. Заранее благодарю.
Ответить с цитированием
  #2 (permalink)  
Старый 07.05.2015, 18:39
Аспирант
Отправить личное сообщение для vettel Посмотреть профиль Найти все сообщения от vettel
 
Регистрация: 07.05.2015
Сообщений: 43

Если кому-то интересно, нашел решение проблемы.
С помощью Алертов я проверил, что и когда выполнялось. Дело в том, что функция скроллинга (и, стало быть, позиционирования) вызывалась даже тогда, когда условие было не истинно. Хз почему. То есть при уменьшении размера окна функция, которая прикрепляла панель, все равно вызывалась. Для меня загадка - видимо, чего-то я не понимаю.

В итоге решил вынести функцию прикрепления в отдельную именованную. Если окно большое, она вызывается с передачей ей необходимых переменных. Если же окно маленькое, то функция все равно вызывается, но со значением false. Может, выглядит бредово, но оно работает.
Собственно, измененный код (без document.ready и window.resize, это само собой осталось без изменений так, как на коде выше):

function navVerticalShift() {
    var screenHeight = $(window).height();
    var topNav = $('nav').offset().top;
    var $width = $('nav').width();
    var $height = $('nav').height();
    
    if (screenHeight <= $height) {
        windScroll(false);
    }
    else {
            windScroll(screenHeight, topNav, $width, $height);
        }
}

function windScroll(screenHeight, topNav, $width, $height) {
        $(window).scroll(function() {
        if ($(document).scrollTop() > topNav) {
                $('nav').css({top: '1px', position: 'fixed', width: $width + 'px'});
            return;
            }
        else {
                $('nav').css({position: 'static'});
            return;
            }
    });
}
Ответить с цитированием
Ответ



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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Эффект при прокрутке страницы deNSe_01 Events/DOM/Window 2 19.08.2011 22:53
выборка в php при прокрутке страницы вниз Tchort Events/DOM/Window 4 11.08.2011 17:38
Появляющаяся/исчезающая кнопка при прокрутке страницы MailRes Элементы интерфейса 2 22.06.2011 11:49
Баг при прокрутке грида posta ExtJS 0 17.06.2011 14:18
Дерганье div-а при прокрутке Vreditel Events/DOM/Window 2 04.03.2011 08:07