Показать сообщение отдельно
  #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;
            }
    });
}
Ответить с цитированием