Показать сообщение отдельно
  #1 (permalink)  
Старый 12.12.2013, 14:33
Аватар для Nailya
Кандидат Javascript-наук
Отправить личное сообщение для Nailya Посмотреть профиль Найти все сообщения от Nailya
 
Регистрация: 05.04.2013
Сообщений: 135

раздвижение блока вниз
Всем доброго времени суток!

У меня раздвигающийся блок вниз, по клику.
Проблемы следующие:
1. Работает в FF и от IE9, в остальных не хочет работать.

2. Для IE8 использовала obj.currentStyle, но он работает при условии, что в стилях задана высота, а у меня высота раздвигающегося блока динамична, если высоту не задаю в стилях, то при алерте передает NaN

3. В IE8 не передает высоту в скрытый див, подозрение на innerHTML

4. В Chrome тоже не работает, высоту в скрытый див innerHTML передает,но не получает его (mt = objWarpHeight.innerHTML)



Вот код:
window.onload = function(){
var obj = document.getElementById('Inner');//разворачиваемый див
var computedStyle = window.getComputedStyle ? getComputedStyle(obj,null) : obj.currentStyle;
var height = parseInt(computedStyle.height);//получение текущей высоты дива с id="Inner"
var objWarpHeight = document.getElementById('warpHeight');//скрытый див
objWarpHeight.innerHTML = height;//вставка высоты в скрытый див
obj.style.height = 0 + "px";//при загрузке обнуляет высоту
}


Функция, которая разворачивает див
function move_obj(id,mt,mts)
{
	var obj = document.getElementById(id);
	var computedStyle = window.getComputedStyle ? getComputedStyle(obj,null) : obj.currentStyle; 
	var height = parseInt(computedStyle.height);//получает текущую пошаговую высоту
	if (mt == 10000 && height == 0)//при условии, если высота равна 0, то разворачивает див 
	{
	var objWarpHeight = document.getElementById('warpHeight');//передаем высоту из скрытого дива
	mt =  objWarpHeight.innerHTML;//в переменную mt передается значение высоты
	} 
	if (mt == 10000 && height != 0)//при условии, если высота не равна 0, то сворачивает див
	{
		mt = 0;
		mts = mts*(-1);
	}
	if ((height < mt && mts > 0 )||(height > mt && mts < 0 ))
	{
		height = height+mts;
		obj.style.height = height + 'px';		
				
	// Ниже запускаем тайм аут в 1 мс, после чего перезапускаем фунvкцию.
	// Функция перезапускается до тех пор, пока выполняется условие.	
		window.setTimeout(function(){move_obj(id,mt,mts)}, 1);
	} 
}


<div id="wrap">
	<div class="pic" onClick="move_obj('Inner',10000,5)">ещё компоненты</div><!--клик-->
		<div id="Inner">
			<pre>
				<input type="checkbox" name="3" value="yes" checked> Виноград
				<input type="checkbox" name="4" value="yes" checked> Ананас
				<input type="checkbox" name="7" value="yes" checked> Апельсин
				<input type="checkbox" name="3" value="yes" checked> Виноград
				<input type="checkbox" name="4" value="yes" checked> Ананас
				<input type="checkbox" name="7" value="yes" checked> Апельсин
				<input type="checkbox" name="4" value="yes" checked> Шоколад
				<input type="checkbox" name="4" value="yes" checked> Каша
				<input type="checkbox" name="7" value="yes" checked> End
			</pre>
		</div>			
	</div><!--end #wrap-->


#wrap{overflow:hidden;}
	#wrap pre{
		margin:0 -170px;
		padding-top:10px;
	}
	#wrap .pic{
		width:284px;
		padding:3px 0;
		background:pink;
		text-align:center;
	}
	#wrap #Inner{
		width:284px;
		background: url("PodborBlock/innerBack.png") repeat-y;
	}
Ответить с цитированием