Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Алгоритм работы интересного меню (https://javascript.ru/forum/misc/57045-algoritm-raboty-interesnogo-menyu.html)

qesplu 16.07.2015 17:58

Алгоритм работы интересного меню
 
Всем привет!
Подскажите, как можно реализовать такое меню (на jQuery):

Схематично нарисовано:


Суть работы:
При уменьшении размера экрана (.on('resize') или при маленьком экране, пункты меню которые не помещаются $(document).width(), перемещаются из главного ul списка в второстепенный, как показано на картинке.
При обратном действии (т.е при увеличении размера экрана), пункты меню которые уже можно отобразить - отображать.
Ширина li - автоматическая, в зависимости от содержимого.

Мое решение:
В массив занес все значения ширины каждого отдельного элемента li.
После загрузки страницы и изменения размера экрана, выполнял функцию, которая:
Проверяла ширину всего меню и ширину всего документа.
ЕСЛИ ширина документа меньше ширины меню:
меню.children('li').slice(последний-элемент).prependTo(второстепенное-меню);

В рекурсии прогонял, пока, не подтверждалась, ЧТО ширина документа больше ширины меню, тогда, пытался вставить первый пункт второстепенного меню в конец и проверить еще раз ширину меню и ширину экрана(окна).
Если, при этом, ширина меню меньше ширины экрана, то добавлял элемент в главное меню:
второстепенное-меню.children('li').slice(0, 1).appendTo(меню);


Все работало, НО работало очень плохо - постоянно мигало, иногда вставляло элемент, когда он не подходил по ширине. Вот такая вот "печальбеда" :(

Интересно, как бы вы решили такую задачу (алгоритм - что проверять? от чего отталкиваться)?
Возможно, есть уже готовое решение моей проблемы? Может есть какая-то библиотека jQuery?

Только учусь...

kostyanet 16.07.2015 18:05

Цитата:

Сообщение от qesplu
перемещаются из главного ul списка в второстепенный, как показано на картинке.

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

qesplu 16.07.2015 18:10

kostyanet, задача такая. Нужно перемещение из одного списка в другой.

kostyanet 16.07.2015 18:21

Ну ладно, а где глюкавый скрипт, или надо с нуля написать?

Наверно тут придется заменять инлайн-блок на блок того ли, который не влазиет видишь ли и соотв наоборот ес ли влазиет.

рони 16.07.2015 19:01

qesplu,
а поискать готовый плагин?

kostyanet 16.07.2015 19:05

Да, этих сайтов с менюхами как грязи в сети. Тыдышь http://cssmenumaker.com/ первый по словам css js menu

рони 16.07.2015 19:08

Цитата:

Сообщение от kostyanet
Да, этих сайтов с менюхами как грязи

и где там подобное меню?

kostyanet 16.07.2015 19:10

а поискать?

ruslan_mart 16.07.2015 19:31

Мне кажется, или это можно сделать на CSS?

kostyanet 16.07.2015 19:36

Наверно можно, лично я не допер как. Сделал фидлю на жабе с примером. Не уверен в надежности решения, но сейчас работает как из пистолета: https://jsfiddle.net/24xdr9ab/1/


Часовой пояс GMT +3, время: 23:37.