Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Смена картинки по наведению курсора мыши 5 секунд (https://javascript.ru/forum/misc/21842-smena-kartinki-po-navedeniyu-kursora-myshi-5-sekund.html)

MironM 26.09.2011 17:24

Смена картинки по наведению курсора мыши 5 секунд
 
Доброго времени суток.

Такая задача:

Есть картинка N1
Есть картинка N2

Нужно чтобы когда человек наводил курсор на картинку N1, то она через 5 секунд менялась на картинку N2.

Если курсор "простоял" на картинке менее 5 секунд, значит отменяем смену картинки.

Есть идеи?

Kolyaj 26.09.2011 17:27

Цитата:

Сообщение от MironM
Есть идеи?

http://javascript.ru/setTimeout
http://javascript.ru/clearTimeout

MironM 26.09.2011 17:31

Не то. Я пробовал это уже.
С таким методом если наводишь курсор на картинку, то она в любом случае поменяется через заданное время.

Serg_pnz 26.09.2011 17:35

http://javascript.ru/clearTimeout
Пример http://menu003.jcase.ru/

MironM 26.09.2011 17:44

Чувствую своей головой я не доделаю этот скрипт :)

Вот что есть :
<script language="JavaScript">


if (document.images) {
img_on =new Image(); img_on.src ="images/logo.png"; 
img_off=new Image(); img_off.src="images/logo2.png"; 
}
function handleOver() { 
if (document.images) document.imgName.src=img_on.src;
}
function handleOut() {
if (document.images) document.imgName.src=img_off.src;
}
</script>

<a href="#" onMouseOver="setTimeout('handleOver();return true;', 2000)"  onMouseOut="handleOut();return true;"><img name="imgName"  src="images/logo.png"/></a>

Gozar 26.09.2011 17:52

Цитата:

Сообщение от MironM (Сообщение 128151)
Не то. Я пробовал это уже.

Попробуй ещё раз, потому что нет других счетчиков времени в js!

Просто проверяй по прошествии 5 сек, если под курсором то, что нужно то выполняемся, если нет, то ничего не делаем.

ugin_root 26.09.2011 20:27

<!DOCTYPE html>
<html>
	<head>
		<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
		<script type="text/javascript" src="js/js.js"></script>
	</head>
	<body>
		<script>
			var img = '';
			function loadImage(){
				im=document.getElementById('im');
				im.setAttribute('src','http://ssl.gstatic.com/onebox/weather/60/light_rain.png');
			}
		</script>
		<img id="im" src="http://ssl.gstatic.com/onebox/weather/60/sun.png" onMouseOver="img=setTimeout(loadImage, 2000)" onMouseOut="clearTimeout(img);">
	</body>
</html>

Gozar 26.09.2011 21:07

И получишь криво работающий говнокод.
Нужно проверять что мышь над элементом, а не надеяться что mouseout сработает.

ugin_root 26.09.2011 21:40

Gozar,
можно правильный пример?
а onMouseOver может не сработать?

Gozar 26.09.2011 22:22

Цитата:

Сообщение от ugin_root (Сообщение 128209)
Gozar,
можно правильный пример?
а onMouseOver может не сработать?

Нет нельзя, потому что реализация довольно большая и в своё время отняла у меня приличное количество времени.

Можешь не верить на слово, тем более что скрипт нужен не тебе. Одно могу сказать точно, что mouseout вешать на контейнеры с вложениями нельзя(можно, но не стоит). У тс контейнер а.

ugin_root 26.09.2011 22:44

Gozar,
т.е. если это например img или input которые не могут иметь вложений то всё сработает как нужно?
а если событие повешено например на дивку внутри которой ещё одна (но находящаяся за пределами родительский например margin-left:-200px; ) то при отводе курсора от дочернего, событие onMouseOver сработает и у родителя? (не охота тестить на разных браузерах, тем более если кто-то уже это знает)

dmitriymar 26.09.2011 22:48

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

Gozar 26.09.2011 22:56

mouseout обычно срабатывает если внутри контейнера что то лежит и мышь переходит на это что-то(элемент).

Тут два выхода, видится мне. Либо убираем из контейнера всё и делаем через background: картинка, либо через mouseleave, можно jquery подтянуть. Другие варианты сложнее, поэтому забил на них.

Gozar 26.09.2011 22:58

Цитата:

Сообщение от dmitriymar (Сообщение 128227)
Gozar,
та лад,ты усложняешь.

Ну может быть. По идее тэг img не нужен

MironM 26.09.2011 23:16

В общем нашел решение на CSS со спаном.
Работает неплохо, но немного не то что нужно, а именно - когда выводится вторая картинка, то первая не убирается, а остается в фоне и если вторая меньше размером чем первая, то выглядит криво.

Короче говоря был бы рад решению на JS, кто сделает - получит немного вмр на пиво :)

Повторю задание:
Есть картинка N1
Есть картинка N2

Нужно чтобы когда человек наводил курсор на картинку N1, то она через 5 секунд менялась на картинку N2 (желательно плавно)

Если курсор "простоял" на картинке менее 5 секунд, значит отменяем смену картинки.

Gozar 26.09.2011 23:36

Вмр не деньги, пиво я не пью, немного - это мало. Я пас.

dmitriymar 26.09.2011 23:38

Цитата:

Сообщение от MironM
получит немного вмр на пиво

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

melky 27.09.2011 02:41

немножко с jquery из-за анимаций

<div style="border:1px red dashed; padding:4px; position:absolute;">
<img src="http://javascript.ru/forum/images/ca_serenity/misc/logo.gif" to="http://javascript.ru/img/webstorm.png">
</div>
<script src="http://yandex.st/jquery/1.6.4/jquery.min.js"></script>
<script>
var timer;

$("div").hover( function(){
    
    var img = $("img", this);
    
    timer = setTimeout(function(){
        img.fadeOut("slow",function(){
           img.attr('src', img.attr("to") ).fadeIn();  
        });
    }, 5*1000);
    
}, function(){
    clearTimeout( timer );
});
</script>

MironM 27.09.2011 09:34

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

melky 27.09.2011 09:45

тут тоже картинка в диве


тогда киньте html двух таких картинок.

MironM 27.09.2011 10:21

Я имел в виду вашу картинку в диве.

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

ugin_root 27.09.2011 13:09

Цитата:

В общем при наведении ничего не происходит, хоть куда вставляю на странице...
а jQuery у вас подключен?
этот пример работает без jQuery
<!DOCTYPE html>
<html>
	<head>
		<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
		<script type="text/javascript" src="js/js.js"></script>
	</head>
	<body>
		<script>
			var img = '';
			function loadImage(){
				im=document.getElementById('im');
				im.setAttribute('src','http://javascript.ru/forum/image.php?u=11&dateline=1306080557');
			}
		</script>
		<img id="im" src="http://javascript.ru/forum/image.php?u=2722&dateline=1244616894" onMouseOver="img=setTimeout(loadImage, 2000)" onMouseOut="clearTimeout(img);">
	</body>
</html>

MironM 27.09.2011 16:39

ugin_root, вроде работает, спасибо.
Оставь кошель и аську в личку (на всяк случай, вдруг чего еще понадобится)


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