Javascript.RU

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

Переполнение меню
Здравствуйте уважаемые ГУРУ javascript; у меня стоит задача реализовать переполнение меню, т.е. идея в том, что бы при добавлении нового элемента в !горизонтальное! меню с навигацией, если НовыйТолькоЧтоДобавленный Элемент переносится на другую строчку, т.е. все элементы меню имеют ширину больше чем область ширины самого меню (к примеру 1000 тогда для тех элементов кот. не влазят, создается отдельная кнопочка(при наведении на эту кнопочку, ну или при нажатии(не имеет значения) все те элементы кот. не влезли выстраиваются в список вертикально).

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

<div id="menu">
<ul>
<li><a href="#">Главная</a></li>
<li><a href="#">О нас</a></li>
<li><a href="#">Разное</a></li>
<li><a href="#">Товары</a></li>
<li><a href="#">Samsung</a></li>
<li><a href="#">Nokia</a></li>
<li><a href="#">Tefal</a></li>
<li><a href="#">Asus</a></li>
<li><a href="#">Еще ссылка</a></li>
<li><a href="#">ссылка кот. не влазит</a></li>
</ul>
</div>

т.е.

window.onload = function ()
{
var menu = document.getElementById('menu');
var originalWidth = menu.clientWidth;
}
После чего, я так думаю, нужно сделать проверочку то то вроде:

if originalWidth < И тут вопрос

Как получить тот элемент кот. не влез?
Помогите пож-та, Спасибо огромное!
Ответить с цитированием
  #2 (permalink)  
Старый 04.11.2013, 13:45
Интересующийся
Отправить личное сообщение для titan1993 Посмотреть профиль Найти все сообщения от titan1993
 
Регистрация: 04.11.2013
Сообщений: 14

даже не так, как получить ширину всех блоков {li a} а потом уже проверочку, для тех элементов кот не влезли...
Ответить с цитированием
  #3 (permalink)  
Старый 04.11.2013, 13:58
Аватар для danik.js
Профессор
Отправить личное сообщение для danik.js Посмотреть профиль Найти все сообщения от danik.js
 
Регистрация: 11.09.2010
Сообщений: 8,804

var items = menu.children;
далее проходишь циклом и проверяешь свойство items[i].offsetWidth если не влазит - останавливаешь цикл и предпринимаешь меры.
__________________
В личку только с интересными предложениями
Ответить с цитированием
  #4 (permalink)  
Старый 04.11.2013, 14:12
Интересующийся
Отправить личное сообщение для titan1993 Посмотреть профиль Найти все сообщения от titan1993
 
Регистрация: 04.11.2013
Сообщений: 14

Сообщение от danik.js Посмотреть сообщение
var items = menu.children;
далее проходишь циклом и проверяешь свойство items[i].offsetWidth если не влазит - останавливаешь цикл и предпринимаешь меры.
Спасибо
Ответить с цитированием
  #5 (permalink)  
Старый 04.11.2013, 15:53
Интересующийся
Отправить личное сообщение для titan1993 Посмотреть профиль Найти все сообщения от titan1993
 
Регистрация: 04.11.2013
Сообщений: 14

window.onload = function ()
{
var menu = document.getElementById('menu');
var items = menu.childNodes[1].children;
var orWidth = menu.offsetWidth;
var sun=0;
for (var i=0; i<items.length; i++)
{
var sum = items[i].offsetWidth;
sun+=sum;
if (sun > orWidth)
{
var newMenu = document.createElement('DIV');
items.insertBefore(newMenu, items[i])
}
}
}
Ответить с цитированием
  #6 (permalink)  
Старый 04.11.2013, 15:55
Интересующийся
Отправить личное сообщение для titan1993 Посмотреть профиль Найти все сообщения от titan1993
 
Регистрация: 04.11.2013
Сообщений: 14

все, спасибо я понял что делать
Ответить с цитированием
  #7 (permalink)  
Старый 04.11.2013, 18:01
Интересующийся
Отправить личное сообщение для titan1993 Посмотреть профиль Найти все сообщения от titan1993
 
Регистрация: 04.11.2013
Сообщений: 14

вот рабочий код, если кому поможет

window.onload = function ()
{
var menu = document.getElementById('menu');
var items = menu.childNodes[1].children;
var orWidth = menu.offsetWidth;
var sun=0;
var arr = new Array();
for (var i=0; i<items.length; i++)
{
var sum = items[i].offsetWidth;
sun+=sum;
if (orWidth < sun)
{
var count = i;
break;
}
}
var sum = items.length - count;
var ul = document.getElementById('perepoln');
for (i=0; i <= count; i++)
{
ul.insertBefore(items[count], ul.children[i]);
}
}
Ответить с цитированием
Ответ



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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Открыть слайд (раздел) текущего пункта меню Demath Элементы интерфейса 8 18.07.2012 02:49
Подсветка выделенного элемента меню ajax-сайта crayday AJAX и COMET 0 11.05.2012 12:25
скрипт работает только на последнем пункте меню walking Элементы интерфейса 0 08.01.2012 14:56
Выпадающие меню like2dev Общие вопросы Javascript 9 21.10.2011 14:09
Проблема с аккордионом и меню Tie ExtJS 3 01.09.2011 14:36