Форум программистов, компьютерный форум, киберфорум
JavaScript
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.79/14: Рейтинг темы: голосов - 14, средняя оценка - 4.79
4 / 4 / 0
Регистрация: 03.12.2009
Сообщений: 110

Вертикальное меню

30.10.2010, 18:42. Показов 2747. Ответов 5
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Создаю вертикальное меню, в котором при нажатии на пункт, плавно выезжают подпункты (если они есть). Но тут и вся проблема.
Подпункты меню можно добавлять/удалять из «админки», поэтому высоту всего этого дела я не знаю, а для того, чтобы подпункты выезжали, использую функцию, одним из параметров которой есть высота.
offsetHeight не работает, так как изначально в элементов стоит свойство display: none; и при этом высота соответственно равна 0.
Как можно сделать, чтобы оно работало, или сделать по-другому.
Думал, может сначала посчитать их количество, потом умножать на высоту одного, но тут другая проблема – если подпункт не влезает в строку, то он переносится в следующую и поэтому высота будет неправильной.
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
30.10.2010, 18:42
Ответы с готовыми решениями:

Вертикальное меню!
Всем привет! сразу переду к вопросу (срочно просто надо) 1)Как сделать, чтобы background в меню оставлся активным после выбора...

вертикальное меню
Добрый день! Подскажите пожалуйста как можно исправить код чтоб меню выезжала при наведении мышки и заезжала при отведении? Вот...

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

5
 Аватар для ostgals
886 / 681 / 101
Регистрация: 23.01.2009
Сообщений: 1,582
30.10.2010, 19:00
Если у подпунктов через css установлено абсолютное позиционирование, то можно использовать не display:none, а visibility:hidden. При этом размеры будут определяться. Должны, во всяком случае.
0
4 / 4 / 0
Регистрация: 03.12.2009
Сообщений: 110
30.10.2010, 19:16  [ТС]
К сожалению не абсолютное)

Добавлено через 6 минут
Я делаю с помощью span-ов.
Напридумал себе так: что если создать один со свойством visibility:hidden и с помощью абсолютного позиционирования запихать куда-то вниз, потом опять создать со свойством display:none. Определяем высоту первого (во второго она такая же) и все красивенько работает… Очень ли будет плохо выводить по два раза наборы подпунктов?
0
 Аватар для ostgals
886 / 681 / 101
Регистрация: 23.01.2009
Сообщений: 1,582
30.10.2010, 19:21
Ну.. Не знаю.. Если нормально работает, то можно и оставить.

Добавлено через 1 минуту
А зачем, кстати, пересоздавать, если уже создан? Просто после определения высоты к тому же элементу применить display:none...
1
4 / 4 / 0
Регистрация: 03.12.2009
Сообщений: 110
30.10.2010, 19:29  [ТС]
Сейчас попробую!
0
4 / 4 / 0
Регистрация: 03.12.2009
Сообщений: 110
02.11.2010, 23:31  [ТС]
Сделал, но терь другая беда!
Изначально при наведении на пункт меню, картинка меняется на вторую.
Далее, если нажать, то с помощью JavaScript выпадает подменю, следующий раз нажимаем, подменю пропадает.
После этого, при наведении на пункт меню, картинка не меняется.
Вот упрощенные коды:
HTML5
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
<ul class='menu'>
<li id='menu1' onclick="show('hide1','menu1',150,2)">
    Каталог для Украины
    <span id='hide1'>
        <a href='view.php?t=urk&amp;id=1'>name1</a>
        <a href='view.php?t=urk&amp;id=2'>name2</a>
        <a href='view.php?t=urk&amp;id=3'>name3</a>
        <a href='view.php?t=urk&amp;id=4'>name5</a>
        <a href='view.php?t=urk&amp;id=6'>name6</a>
        <a href='view.php?t=urk&amp;id=7'>name7</a>
    </span>
</li>
<li>
    О нас, контакты
</li>
</ul>
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
 var s=[],s_timer=[];
 
 function show(id,id2,h,v)//id элемента,h высота ,v скорость (-v) если блок надо первоначально закрывать
 { s[id]= s[id]==v? -v : v;
    var obj=document.getElementById(id);
    var obj2=document.getElementById(id2);
 
    s_timer[id]=setTimeout( function () {
        var obj=document.getElementById(id);
        if(obj.offsetHeight+s[id]>=h){
            obj.style.height=h+"px";
            obj.style.overflow="auto";
        }
        else if(obj.offsetHeight+s[id]<=0){
            obj.style.height=0+"px";
            obj.style.display="none";
            obj2.style.background="url(img/menu_first.jpg) no-repeat";
 
        }
        else {
            obj.style.height=(obj.offsetHeight+s[id])+"px";
            obj.style.overflow="hidden";
            obj.style.display="block";
            obj2.style.background="url(img/menu_first_hover.jpg) no-repeat";
            setTimeout(arguments.callee, 8);
        }
      }, 10);
 }
CSS
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
ul.menu li{
    text-align:left;
    list-style: none;
    display: block;
    width: 248px;
    text-decoration: none;
    padding: 10px 10px 10px 55px;
    background: url(img/menu_first.jpg) no-repeat;
 
}
 
ul.menu li a{
    outline: none;
    display: block;
    color: #000;
    text-decoration: none;
}
 
ul.menu li:hover {
    background:  url(img/menu_first_hover.jpg) no-repeat;
}
Добавлено через 52 минуты
Создал другую тему JavaScript и СSS
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
02.11.2010, 23:31
Помогаю со студенческими работами здесь

Вертикальное меню без jQuery
в джаваскрипте новичек не могу доделать чтобы работало. При клике на плюсик, должно скрывать под меню при повторном открываться

Пример скрипта вертикальное меню с выпадающим подменю
Где можно взять пример скрипта вертикального меню с выпадающим подменю (Двухуровневой структуры достаточно - интуитивно понятный код)?

Раскрывающееся меню - при открытии/закрытии вложенного меню закрывается все меню
Проблема во вложенном меню. При открытии/закрытии вложенного меню закрывается все меню. Надо, чтобы главное меню не реагировало на клики во...

Вертикальное центрирование
Есть header и footer. Между ними должна быть кнопка, которая на разных мониторах будет находится по-центру по вертикали блока content : ...

Вертикальное и горизонтальное центрирование
Добрый вечер! :senor: Решил расположить слой по середине экрана. Для начала по горизонтали. Можно действовать так: (ширина_окна / 2)...


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

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Новые блоги и статьи
Символьное дифференцирование
igorrr37 13.02.2026
/ * Логарифм записывается как: (x-2)log(x^2+2) - означает логарифм (x^2+2) по основанию (x-2). Унарный минус обозначается как ! в-строка - входное арифметическое выражение в инфиксной(обычной). . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL3_image
8Observer8 10.02.2026
Содержание блога Библиотека SDL3_image содержит инструменты для расширенной работы с изображениями. Пошагово создадим проект для загрузки изображения формата PNG с альфа-каналом (с прозрачным. . .
Установка Qt-версии Lazarus IDE в Debian Trixie Xfce
volvo 10.02.2026
В общем, достали меня глюки IDE Лазаруса, собранной с использованием набора виджетов Gtk2 (конкретно: если набирать текст в редакторе и вызвать подсказку через Ctrl+Space, то после закрытия окошка. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru