Форум программистов, компьютерный форум, киберфорум
jQuery
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 Аватар для vettel
84 / 84 / 41
Регистрация: 14.02.2015
Сообщений: 320

Фиксирование и открепление вертикальной навигационной панели при прокрутке

07.05.2015, 18:33. Показов 768. Ответов 0
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте.
На странице есть вертикальная панель навигации. Оформленная там, разные эффекты при наведении и т.д.
Решил сделать так, что, когда страница прокручивается до начала панели, она(панель) прикрепляется. Для того, чтобы ее всегда было видно. С этим проблем не возникло.
Но потом решил добавить кода для тех, кто изменит размер окна или масштаб. Принцип такой: если длина окна меньше длины навигационной панели, никакого прикрепления происходить не должно.
Вот код:
JavaScript
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
$(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 часа 57 минут
Если кому-то интересно, нашел решение проблемы.
С помощью Алертов я проверил, что и когда выполнялось. Дело в том, что функция скроллинга (и, стало быть, позиционирования) вызывалась даже тогда, когда условие было не истинно. Хз почему. То есть при уменьшении размера окна функция, которая прикрепляла панель, все равно вызывалась. Для меня загадка - видимо, чего-то я не понимаю.

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

JavaScript
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
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 if (screenHeight > $height) {
            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;
            }
    });
}
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
07.05.2015, 18:33
Ответы с готовыми решениями:

Редактирование навигационной панели bootstrap
Подскажите, есть навигационная панель bootstrap, которая на моб. устройстве отображается горизонтально. Как сделать что бы она...

Фон статичным и по зуму и по прокрутке вертикальной
добрый день народ. вопрос тут такой: надо 1 что бы фоновый ресунок стоял на месте 2 при зуме он не повторялся а тоже стоял на месте ...

Выравнивание навигационной панели Bootstrap4 по правому краю
Добрый вечер, как сделать так, чтобы меню было по правому краю через Bootstrap?

0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
07.05.2015, 18:33
Помогаю со студенческими работами здесь

Как работает шаблон NavigationDrawer в AndroidStudio, где обрабатывать нажатия на навигационной панели?
Всем здрасьте! Не могу никак понять, где в шаблоне, который генерирует Android Studio, вешать обработки нажатия на соответствующую...

Фиксирование числа при сравнении
Есть данные которые считываются из файла (цены акции) за определенный период. Запускается цикл, берется цена (допустим 100) и к ней...

Фиксирование Типа цены при обмене с сайтом
Добрый день всем! Есть 1с Битрикс, который имеет только один тип цен. И есть 1С-ка, в которой несколько типов цен. При выгрузке в 1С...

Фиксирование заголовка таблицы при скроллинге. По горизонтали и вертикали
Всем доброго времени суток! Задача: есть длинная и широкая таблица (около 2300 пикселов в ширину). Над ней -менюшка в диве. Нужно,...

Автоматическое фиксирование даты при изменении данных в ячейке с выпадающим списком
Доброго времени суток! Помогите с решением следующей задачи: В таблице есть несколько столбцов, расположенных в разных местах...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
1
Ответ Создать тему
Новые блоги и статьи
http://iceja.net/ математические сервисы
iceja 20.01.2026
Обновила свой сайт http:/ / iceja. net/ , приделала Fast Fourier Transform экстраполяцию сигналов. Однако предсказывает далеко не каждый сигнал (см ограничения http:/ / iceja. net/ fourier/ docs ). Также. . .
http://iceja.net/ сервер решения полиномов
iceja 18.01.2026
Выкатила http:/ / iceja. net/ сервер решения полиномов (находит действительные корни полиномов методом Штурма). На сайте документация по API, но скажу прямо VPS слабенький и 200 000 полиномов. . .
Расчёт переходных процессов в цепи постоянного тока
igorrr37 16.01.2026
/ * Дана цепь(не выше 3-го порядка) постоянного тока с элементами R, L, C, k(ключ), U, E, J. Программа находит переходные токи и напряжения на элементах схемы классическим методом(1 и 2 з-ны. . .
Восстановить юзерскрипты Greasemonkey из бэкапа браузера
damix 15.01.2026
Если восстановить из бэкапа профиль Firefox после переустановки винды, то список юзерскриптов в Greasemonkey будет пустым. Но восстановить их можно так. Для этого понадобится консольная утилита. . .
Сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11 — это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
Classic Notepad for Windows 11
Jel 10.01.2026
Old Classic Notepad for Windows 11 Приложение для Windows 11, позволяющее пользователям вернуть классическую версию текстового редактора «Блокнот» из Windows 10. Программа предоставляет более. . .
Почему дизайн решает?
Neotwalker 09.01.2026
В современном мире, где конкуренция за внимание потребителя достигла пика, дизайн становится мощным инструментом для успеха бренда. Это не просто красивый внешний вид продукта или сайта — это. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru