Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 11.01.2012, 16:38
Новичок на форуме
Отправить личное сообщение для JokerVilli Посмотреть профиль Найти все сообщения от JokerVilli
 
Регистрация: 26.12.2011
Сообщений: 5

События onMouseOver и onMouseOut одновременно
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<title>Untitled Document</title>
 <style type="text/css">
 BODY {
	 margin: 0px;
 }

#y {
background-color: silver;
width: 516px;
height: 666px;
position: absolute;
top: 0px;
z-index: 10;
display: block;
}
  </style>
</head>
<body>
  <script type="text/javascript">
var t=1; 
var i = 0;
function fade() {
i++; 
if (i <= 100) {
setTimeout(fade, t);
document.getElementById('y').innerHTML = "i:"+i+"<br />Прозрачность"+(1-i/100);
}
 else i=100
}
function fade_out() {
if (i>0) {
i--; 
document.getElementById('y').innerHTML = "rfr<br /><br /><br />i:"+i+"<br />Прозрачность"+(1-(i)/100);
setTimeout(fade_out, t);   	
}
else i=0;
}
  </script>
<div id="y" onMouseOver="fade()" onMouseOut="fade_out()"></div>
</body>
</html>

Данный скрипт работает корректно, только если пройдет полный отсчет от 0 до 100. Почему если отвести курсор допустим, когда значение i будет равно 50, то оно не начнет уменьшатся обратно до 0, т. е. событие omMouseOut не рсаботает (точнее оно срабатывает на долю секунды). Поясните пожалуйста что я делаю не так?
Ответить с цитированием
  #2 (permalink)  
Старый 11.01.2012, 17:24
Аватар для nerv_
junior
Отправить личное сообщение для nerv_ Посмотреть профиль Найти все сообщения от nerv_
 
Регистрация: 29.11.2011
Сообщений: 3,924

Сообщение от JokerVilli
События onMouseOver и onMouseOut одновременно
Такое возможно только в IE (шутка)
Сообщение от JokerVilli
Почему если отвести курсор допустим, когда значение i будет равно 50, то оно не начнет уменьшатся обратно до 0, т. е. событие omMouseOut не рсаботает
Значит, это не предусмотрено программой. Может это пригодится.
__________________
Чебурашка стал символом олимпийских игр. А чего достиг ты?
Тишина - самый громкий звук
Ответить с цитированием
  #3 (permalink)  
Старый 11.01.2012, 18:35
х.з
Посмотреть профиль Найти все сообщения от dmitriymar
 
Регистрация: 21.11.2010
Сообщений: 4,588

JokerVilli,
таймер останавливай при изменении овер/оут.
Ответить с цитированием
  #4 (permalink)  
Старый 12.01.2012, 15:17
Новичок на форуме
Отправить личное сообщение для JokerVilli Посмотреть профиль Найти все сообщения от JokerVilli
 
Регистрация: 26.12.2011
Сообщений: 5

Спасибо за советы! Добавил clearTimeout в обе функции, но почему то это работает только в одной функции, т.е.
function fade() {
//clearTimeout(timer2);
i++; 
	if (i <= 100) {
	timer =setTimeout(fade, t);
	document.getElementById('y').style.opacity =1-i/100;
	document.getElementById('y').innerHTML = "i:"+i+"<br />Прозрачность"+(1-i/100);
	}
 else i=100;
}

function fade_out() {
	if (i>0) {
	clearTimeout(timer);
	i--; 
	document.getElementById('y').style.opacity = 1-(i+1)/100;
	document.getElementById('y').innerHTML = "rfr<br /><br /><br />i:"+i+"<br />Прозрачность"+(1-(i)/100);
	timer2 = setTimeout(fade_out, t);
	else i=0;
}


clearTimeout(timer) срабатывает, а вот если убрать слеши перед clearTimeout(timer2), то это уже не сработает.. Почему?
Ответить с цитированием
  #5 (permalink)  
Старый 12.01.2012, 16:06
х.з
Посмотреть профиль Найти все сообщения от dmitriymar
 
Регистрация: 21.11.2010
Сообщений: 4,588

причина-таймеры становятся очередь на выполнение -пересмотри логику своего кода.
Ответить с цитированием
  #6 (permalink)  
Старый 12.01.2012, 16:29
Новичок на форуме
Отправить личное сообщение для JokerVilli Посмотреть профиль Найти все сообщения от JokerVilli
 
Регистрация: 26.12.2011
Сообщений: 5

хорошо, если они становятся в очередь, тогда логика мне представляется следующим образом:

происходит выполнение функции на событие1 -> для нее устанавливается свой таймер -> событие1 заканчивается, начинается событие2 -> выпонлянется другая функция, старый таймер отключается, устанавливается новый

вроде бы вполне логично, и если затем в этой цепочке поменять местами цифры 1 и 2, все вроде бы должно работать так же.. но яваскрипт так не считает(

какова же тогда должна быть логика?
Ответить с цитированием
  #7 (permalink)  
Старый 13.01.2012, 11:11
Новичок на форуме
Отправить личное сообщение для JokerVilli Посмотреть профиль Найти все сообщения от JokerVilli
 
Регистрация: 26.12.2011
Сообщений: 5

все, разобрался) нужно было объявить глобально переменные timer и timer2. но теперь проблема другая - я обращаюсь к элементу через id, а что если у меня таких элементов 10 штук и нужно чтобы для каждого выполнялась эта функция? получается у всех элементов будет один класс, но в яваскрипте нет функции getElementByClass..

Как быть в этом случае?
Ответить с цитированием
  #8 (permalink)  
Старый 13.01.2012, 14:36
Аватар для GuardCat
Просто любитель
Отправить личное сообщение для GuardCat Посмотреть профиль Найти все сообщения от GuardCat
 
Регистрация: 13.09.2011
Сообщений: 300

Есть такая функция в DOM (document.getElementsByClassName). Но не во всех браузерах. Посмотрите здесь, мне кажется это то, что вам понадобится.

P.S. А ещё погуглите querySelector и querySelectorAll. Это ещё менее кроссбраузерно, но зато быстро и приятно. Я использую в расширениях и букмарклетах для Хрома.
Ответить с цитированием
  #9 (permalink)  
Старый 13.01.2012, 15:04
Аватар для nerv_
junior
Отправить личное сообщение для nerv_ Посмотреть профиль Найти все сообщения от nerv_
 
Регистрация: 29.11.2011
Сообщений: 3,924

Сообщение от JokerVilli
я обращаюсь к элементу через id, а что если у меня таких элементов 10 штук
еще может пригодиться getElementsByTagName
__________________
Чебурашка стал символом олимпийских игр. А чего достиг ты?
Тишина - самый громкий звук
Ответить с цитированием
  #10 (permalink)  
Старый 15.01.2012, 02:07
Профессор
Отправить личное сообщение для Seva1986 Посмотреть профиль Найти все сообщения от Seva1986
 
Регистрация: 01.10.2011
Сообщений: 422

Сообщение от GuardCat
P.S. А ещё погуглите querySelector и querySelectorAll. Это ещё менее кроссбраузерно
какраз наоборот getElementsByClassName не работает в 8 осле а querySelector и querySelectorAll там работают, но есть одно но, они создают статический масив, а getElement... динамические, тоесть если скрптом добавить новые эелементы getElement... сам обновиться, а querySelectorAll нужно переинициализировать.


Сообщение от JokerVilli
Как быть в этом случае?
думаю ту есть чтото полезное для вас

http://learn.javascript.ru/searching-elements-dom

Последний раз редактировалось Seva1986, 15.01.2012 в 02:14.
Ответить с цитированием
Ответ



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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
проблема с событиями onMouseOut и onMouseOver IIIgun Общие вопросы Javascript 16 13.05.2011 21:55
События tap и swipeLeft одновременно на jQueryMobile vanches Мобильный JavaScript 2 16.12.2010 18:00
onmouseover + onmouseout m0nya Events/DOM/Window 6 12.07.2010 13:36
Как совместить работу onmouseover, onmouseout и onclick Sed0Y Общие вопросы Javascript 11 11.08.2009 15:59
Подскажите как сделать (события onmouseover и onclick) House M.D. Я не знаю javascript 2 04.06.2009 09:50