Javascript.RU

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

setTimeout и event.srcElement
Хочу для обычной вертикальной выпадающей вниз менюшки из списков добавить плавности и задержку перед закрытием. Когда мышку отводим от пункта (onmouseout) - надо проверить куда мы её отвели - на подпункт или нет. Для этого делаю задержку через settimeout, а там уже проверяю где сейчас курсор. Так вот - почему то не выходит ничего. event.srcElement тупо не работает внутри таймера, а document.activelement хоть убей выдаёт боди. Если взять event.srcElement до таймера - то он берет сам пункт с которого мышку увели, а не тот на который навелись.
<body>
<style>
	#menu5 {
	border: solid 7px black; 	
	border-bottom-color: #e6350c;
	border-right-color: #e6350c;
	border-left-color:#fb8866;
	border-top-color:#fb8866;
	width: 180px;
    }

	#menu5,  #menu5 ul{
	list-style-type: none;
	margin: 0;
	padding:0;		
 }
    #menu5 li ul li{
	margin: 0;
	text-align:left;
    }
 

#menu5 a {display: block; height: 30px;  width: 180px; margin: 0px;  

background-color:#333;

  }
  

  
</style>
 <ul id="menu5"> 

        
        <li  ><a onmouseover="showli()" onmouseout="b()" id="asdd"  href="#">Встречи</a>
        
        <ul onmouseover="a();" onmouseout="b()" > 
        <li><a id="s1" style="opacity: 0.5; filter: alpha(opacity=50);" href="#">Ссылка 1</a></li>
        <li><a style="opacity: 0.5; filter: alpha(opacity=50);" href="#">Ссылка 2</a></li>
        </ul></li>  
        

        
  </ul>
    <SCRIPT  language="javascript">
	var hT, sT, a, ids;
	
	function a()
	{a=2;}
	
	function x()
	{ids=event.srcElement.id;
	alert(ids);}
	
	function b() {
		setTimeout (function()
 {
	x();
	if (ids=='UL'){ Hide('s1', 0.5);}}
	 
	 , 1000); 
	 }
	
	
	
	function c(){
	Hide ('s1', 0.5);}
	
	function showli()
	{a=5; Show('s1', 1);}
	
function Show(objId, x) {
	

var obj = document.getElementsByTagName("a")[1];

op = (obj.style.opacity)?parseFloat(obj.style.opacity):parseInt(obj.style.filter)/100;
if(op < x) {
clearTimeout(hT);
op += 0.1;

	for (var i=1; i<3; i++) {
var obj = document.getElementsByTagName("a")[i];
obj.style.opacity = op;
obj.style.filter='alpha(opacity='+op*100+')';}
sT=setTimeout('Show(\''+objId+'\', '+x+')',30);}
}



function Hide(objId, x) {
	
var obj = document.getElementsByTagName("a")[1];

op = (obj.style.opacity)?parseFloat(obj.style.opacity):parseInt(obj.style.filter)/100;
if(op > x) {
clearTimeout(sT);
op -= 0.1;
for (var i=1; i<3; i++) {
var obj = document.getElementsByTagName("a")[i];
obj.style.opacity = op;
obj.style.filter='alpha(opacity='+op*100+')';
hT=setTimeout('Hide(\''+objId+'\', '+x+')',30);
}}

}

</SCRIPT>


</body>
Ответить с цитированием
  #2 (permalink)  
Старый 01.10.2011, 23:53
Профессор
Отправить личное сообщение для zebra Посмотреть профиль Найти все сообщения от zebra
 
Регистрация: 14.09.2011
Сообщений: 523

function a()
{a=2;}
После этого функции a не будет.

Вы опубликовали очень много кода.

Пожалуйста, локализуйте проблему!

Выделите фрагмент кода, по которому есть вопрос и опубликуйте его отдельно.

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

Спасибо.
Ответить с цитированием
  #3 (permalink)  
Старый 02.10.2011, 00:09
Новичок на форуме
Отправить личное сообщение для Kolik317 Посмотреть профиль Найти все сообщения от Kolik317
 
Регистрация: 01.10.2011
Сообщений: 2

<body>
<style>
	#menu5 {
	border: solid 7px black; 	
	border-bottom-color: #e6350c;
	border-right-color: #e6350c;
	border-left-color:#fb8866;
	border-top-color:#fb8866;
	width: 180px;
    }
	#menu5,  #menu5 ul{
	list-style-type: none;
	margin: 0;
	padding:0;		
 }
    #menu5 li ul li{
	margin: 0;
	text-align:left;
    }
 
#menu5 a {display: block; height: 30px;  width: 180px; margin: 0px;  
background-color:#333;
}
</style>
 <ul id="menu5"> 
 <li  ><a onmouseover="Show('s1', 1)" onmouseout="b()" id="asdd"  href="#">Встречи</a>
<ul> 
<li><a id="s1"  href="#">Ссылка 1</a></li>
</ul></li>  
 </ul>
    
<SCRIPT  language="javascript">
	var ids;
	
	function x()
	{ids=event.srcElement.id;
	alert(ids);}
		
function b() {
setTimeout (function()
 {
	x();
	if (ids=='s1'){alert('ok')}}
	 , 1000); 
	 }


</SCRIPT>
</body>

По коду, надо чтобы когда мы переводим курсор с пункта Встречи на пункт Ссылка 1 нам выдало Id "ссылки 1"(s1) через 1сек. Но event.srcElement.id просто не работает когда вызывается таймером.

Последний раз редактировалось Kolik317, 02.10.2011 в 00:17.
Ответить с цитированием
  #4 (permalink)  
Старый 02.10.2011, 00:18
Профессор
Отправить личное сообщение для zebra Посмотреть профиль Найти все сообщения от zebra
 
Регистрация: 14.09.2011
Сообщений: 523

Поставьте дебагер, например firebug для мозилы
Ответить с цитированием
Ответ



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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Передача контекста через setTimeout decadent jQuery 3 10.02.2011 19:01
setTimeout как он работает??? namo86 Общие вопросы Javascript 16 02.02.2011 09:01
setTimeout в браузере IE и Opera leha66 Javascript под браузер 2 13.12.2010 13:02
setTimeout setInterval и др. mycoding Общие вопросы Javascript 6 28.10.2010 17:26
setTimeout Воитель Общие вопросы Javascript 5 23.01.2009 10:36