Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 02.07.2012, 14:01
Интересующийся
Отправить личное сообщение для land15 Посмотреть профиль Найти все сообщения от land15
 
Регистрация: 01.12.2011
Сообщений: 14

плавно раскрывающееся многоуровневое меню
На выходных решил поэкспрементировать, и нашел в чем секрет.
Логика такая:
1. когда элемент невидим, то el.style.display = 'none';
2. начинаем открывать -

el.style.display = 'block;
el.style.height/width = 0 + 'px';

так активизируются scrollHeight/Width, имеем данные для анимации.
3.начинаем закрывать по onclick, например;
4.неочевидная загадка - когда пункт закрылся надо сделать вот что:

el.style.height/width = "";
el.style.display = 'none';

почему именно пустая строка - не знаю, но именно так работает. Если это не сделать, то вложенные в данный пункт, пункты будут раскрываться, не растягивая родительский.

Тут возникает еще один вопрос - как получить момент полного открытия/особенно закрытия элемента.
Лучший вариант: функция анимации генерирует на старте и в конце события, например moveStart и moveEnd, универсальный обработчик самоопределенных событий, например, Eventer, получает их и запускает функции-обработчики точно в нужный момент и в нужной последовательности.
Как делается Eventer, рассказано на этом сайте. Я сделал свой, корявый, но в данном случае работает.
А можно, конечно, по setTimeout, но мелкие нестыковки по времени обязательно будут.
Так что, никакого волшебства здесь нет, решение заключается в одном, на мой взгляд, совсем в неочевидном и нелогичном действии. Если кто будет делать такое меню на чистом js, то не надо ломать голову, просто ставьте в конце
el.style.height/width = ""
.
Если это решение на самом деле логично, то объясните ход рассуждений, буду признателен, я его нашел совершенно случайно.
Ответить с цитированием
Ответ



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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Многоуровневое вертикальное меню chuser jQuery 0 13.05.2012 23:56
Проблема с аккордионом и меню Tie ExtJS 3 01.09.2011 14:36
Пункти меню плавно збільшувалися при наведенні. Andry309 Javascript под браузер 3 16.05.2011 09:28
Многоуровневое меню ssh Элементы интерфейса 5 09.07.2010 23:50
Раскрывающееся меню, как переставить на другую сторону? Resager Events/DOM/Window 8 22.08.2008 21:56