logo


home map contact


Если вы видите это сообщение - значит вы используете браузер Internet Explorer. Негативное отношение к этому браузеру сложилось не только у владельца данного ресурса, но и у подавляющего большинства людей, разбирающихся в web технологиях. Попробуйте установить один из браузеров по ссылке ниже, возможно вам он тоже понравится больше!

Opera, the fastest and most secure web browser     Spread Firefox Affiliate Button

tree (дерево)

В статье рассмотрено создание на основе JavaScript древовидной структуры с плавно раскрывающимися списками. Начну с примера:

Это скелет для построения полнофункционального скрипта классического дерева или другого списка, хотя можно использовать и в таком виде. Рассмотрим код:

JavaScript:
var t,lit,i;
    
function tree(liter) {         
    lit=liter;						//литера
    i=1;							//счетчик
    t = setInterval(show, 75); 	//развертываем/сворачиваем с заданным интервалом
}
      
function show() {
	var el;
    if(el = document.getElementById(lit + i)) {
		el.style.display = (el.style.display == 'block')?'none':'block';	
		i++;		
    }   
    else clearInterval(t);        
}
HTML:

Можно убрать setInterval и просто вызывать функцию show(), тогда список будет открываться не поочередно, а сразу.

проблемы:

  • если высота блока меньше высоты развернутого списка, то при раскрытии/закрытии пунктов размеры блока будут скакать, придется принимать дополнительные меры




Комментарии:



mrded    16.08.08 23:43

не вижу рекламы на этом сайте. сорри, фаерфокс все режет. но автору спасибо :-*





Михаил    23.02.09 12:51

А вот еще рабочий пример дерева http://nulay.narod.ru/




vnilov    22.03.09 12:37

автору ОГРОМНОЕ спасибо! Побольше бы таких ресурсов в РУнете!




shark182    21.05.09 18:12

Отлично, а насколько сложно сделать чтобы пункты меню закрывались не повторным нажатием, а при нажатии на другие пункты?




Alek Veritov    22.05.09 00:01

to shark182: совсем не сложно - при нажатии на пункт сначала закрывайте все в цикле, а затем открывайте тот, на который нажали. Задача усложнится, если будет больше одного уровня вложенности - их нужно будет учитывать, чтобы не закрыть родительский пункт вместе с нажатым элементом




shark182    22.05.09 13:34

to Alek Veritov: Не ожидал настолько быстрой реакции. Нельзя ли подробнее? Меню например с одним уровнем вложенности. Думаю это дополнение пригодится и другим.




shark18    25.05.09 17:08

to Alek Veritov: У меня уже цифры с ника выпадать стали от мозгового штурма. I need help! Как сначала закрыть все ветки и открыть нужную? P.S. А я вам на баннер кликну))




shark182    25.05.09 18:18

Заработало, но конструкция довольно громоздкая получилась. Через id и каждому элементу прописывается нечто вроде: document.getElementById('s1').style.display='none'; и т.д.




$ezh    11.01.10 15:53

Разрешите вопрос. Каким образом организован цикл по переменной i. можно объяснить?




$ezh    11.01.10 15:53

Разрешите вопрос. Каким образом организован цикл по переменной i. можно объяснить?




ganjour    15.03.10 16:07

так проще и понятнее:

function tree(lit)
{
var el;
var i = 1;
while (el = document.getElementById(lit + i))
{
if (el.style.display == 'block') el.style.display = 'none';
else el.style.display = 'block';

i++;
}
}




ganjour    15.03.10 16:08

забыл: и работает даже в IE )))




vadim    20.03.10 14:39

Подскажите пожалуйста как можно запомнить позицию на которой открыто дерево. Чтоб оно не сворачивалось после обновления страницы




Alek Veritov    20.03.10 21:12

Запомнить позицию можно в куках или в сессии, а при обновлении восстанавливать. Про то, как это сделать на чистом javascript'е можно почитать здесь - http://xhtml.ru/2008/05/14/sessvars/
А вообще планирую скоро выложить материал по этой теме.




vadim    22.03.10 13:22

А подскажите пожалуйста для того что бы запомнить позицию достаточно запомнить значение переменной i в функции show()?




Rus    13.10.10 01:25

Здравствуйте!
Спасибо автору за дерево, всё работает очень неплохо, но есть одна проблемка - http://tdshans.ru/katalog.html, когда наводишь курсор на дерево, то вместо руки появляется значёк "I", а у Вас нет, почему? Помогите пожалуста разобраться.




Ksanti    17.03.11 00:49

Спасибо Автору, не респект Автору за простоту =))) все просто до ужаса =))) а самое главное я нашел в этом то что искал !!!




Ksanti    17.03.11 00:57

"Rus" я не глядел к автору кода в код, но могу сказать что подобное сделать можно с помощью css пример "cursor:pointer;"
Прошу прощения у Админа за ссылку htmlbook.ru вам поможет






Если вам помогла или просто понравилась эта статья вы можете отблагодарить автора кликнув по рекламе. Спасибо!





комментировать:
прежде чем писать комментарий убедитесь, пожалуйста, что он не попадает в нижеследующие категории:
  • не стоит писать "я чайник, помогите ..." или "я начинающий, объясните ..." - уважайте себя! может вы и новичок, но ведь не тупой же! сами вполне способны во всем разобраться, тем более, что материал здесь изложен весьма доступно

  • не пишите вопросы типа "как мне сделать такую же менюху как наверху?", "куда вставлять этот код?", "как устроен интернет?" и т.д. - уважайте время автора!

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

прямые оскорбления кого бы то ни было будут удалятся!
здоровая критика приветствуется!



от кого:  

security picture