Javascript-форум (https://javascript.ru/forum/)
-   Элементы интерфейса (https://javascript.ru/forum/dom-window/)
-   -   Подсчет высоты списка меню (https://javascript.ru/forum/dom-window/39952-podschet-vysoty-spiska-menyu.html)

ivannnn 18.07.2013 11:34

Подсчет высоты списка меню
 
Доброго времени суток!

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

http://ivan-home.no-ip.biz - пока заполнен только пункт Компрессоры.

function setHeightlvlp(clickitem){
		if(clickitem.parent("span").parent("li").find("ul:first").attr('rel')){
			heightlvl2Ul = clickitem.parent("span").parent("li").find("ul:first").attr('rel');
		} else {
			clickitem.parent("span").parent("li").find("ul:first").css({display: 'block',height:"auto"});
			heightlvl2Ul = clickitem.parent("span").parent("li").find("ul:first").height();
		}
	}

	var lis = $('.sidebar .nav').find('li');
	for(var i = 0; i < lis.length; i++) {
		if($(lis[i]).hasClass('current')) {
			if($(lis[i]).parents("li").hasClass('lvl1')){

				var ul = $(lis[i]).find('ul:first');
				$(ul).css({display: 'block',height:"auto"});
				var h = $(ul).height();
				$(ul).css({height: 0, display: 'block'});

				var ulp= $(lis[i]).parents("li.lvl1").find('ul:first');
				$(ulp).css({display: 'block'});
				var hp = $(ulp).height();
				$(ulp).css({height: 0, display: 'block'});

				$(ul).attr("rel", h);
				$(ulp).attr("rel", hp);
				$(ul).css({height: h+'px'});
				$(ulp).css({height: h+hp+'px'});
			} else {
				var ul = $(lis[i]).find('ul:first');
				$(ul).css({display: 'block',height:"auto"});
				var h = $(ul).height();
				$(ul).css({height: 0, display: 'block'});
				$(ul).attr("rel", h);
				$(ul).css({height: h+'px'})
			}
		}
	}

	$(".showchild").live('click', function() {
		var clickitem = $(this);
		if( clickitem.parent("span").parent("li").hasClass('lvl1')){

			if( clickitem.parent("span").parent("li").hasClass('current')){
				clickitem.parent("span").parent("li").find("ul").animate({height: 0}, 300);
				clickitem.parent("span").parent("li").removeClass("current");
				clickitem.parent("span").parent("li").find(".current").removeClass("current");
			} else {
				setHeightlvlp(clickitem);
				clickitem.parent("span").parent("li").find("ul:first").attr('rel',heightlvl2Ul);
				clickitem.parent("span").parent("li").find("ul:first").css({height: 0, display: 'block'});
				clickitem.parent("span").parent("li").find("ul:first").animate({height: heightlvl2Ul+'px'}, 300);
				clickitem.parent("span").parent("li").addClass("current");
			}
		} else {
			if( clickitem.parent("span").parent("li").hasClass('current')){
				setHeightlvlp(clickitem);
				heightLVL1= clickitem.parents(".lvl1").find("ul:first").height(); 
				var resulth = parseInt(heightLVL1)-parseInt(heightlvl2Ul)
				clickitem.parent("span").parent("li").find("ul").animate({height: 0}, 300);
				clickitem.parents(".lvl1").find("ul:first").animate({height: resulth+"px"}, 300);
				clickitem.parent("span").parent("li").removeClass("current");
			} else {
				setHeightlvlp(clickitem);
				heightLVL1 = clickitem.parents(".lvl1").find("ul:first").height();
				clickitem.parent("span").parent("li").find("ul:first").attr('rel',heightlvl2Ul);
				clickitem.parent("span").parent("li").find("ul:first").css({height: 0, display: 'block'});
				clickitem.parent("span").parent("li").find("ul:first").animate({height: heightlvl2Ul+'px'}, 300);
				clickitem.parents(".lvl1").find("ul:first").animate({height:  parseInt(heightlvl2Ul)+ parseInt(heightLVL1)+'px'}, 300);
				clickitem.parent("span").parent("li").addClass("current");
			}
		}
		return false;
	});


Не пинайте пожалуста сильно;)

рони 18.07.2013 12:11

ivannnn,
$('.newselect').selectbox(); а подключен ли данный плагин selectbox? выдаёт что нет и закрывающий тег <html> наклонная черта пропущена. а так слишком много всего подключено разве что метод job помочь сможет

ivannnn 18.07.2013 12:34

тег поправил, скрипты отключил)))

судя по самому скрипту, он высоту списка сохраняет в rel="", но если список скрыт, то там 0.
причем шаблон меню и скрипт взяты с Шаблона интернет-магазина битрикс.


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