Бесконечное замирание с эффектом ролловера изображений jQuery
Я намеревался заменить изображения приятным эффектом затухания: у меня есть одно изображение A в качестве фона. при наведении мыши, изображение B исчезает. при наведении мыши изображение B исчезает, и мы снова видим изображение A. я использую этот код:
<script type='text/javascript'>
$(function() {
$("img.fade")
.mouseover(function() {
$(this).fadeOut(2000);
})
.mouseout(function() {
$(this).fadeIn(2000);
});
});
</script>
но проблема в том, что когда пользователь остается при наведении, он продолжает цикл (fadeIn, fadeOut,fadeIn,fadeOut..). я хочу, чтобы, когда фейер закончился, он остался. когда пользователь щелкает мышью, просто тогда я хочу, чтобы произошло новое затухание. Спасибо!
PS Это рабочий код для использования 2 изображений. это другое решение проблемы, и я это добавлю после того, как мой вопрос будет решен.
<script type='text/javascript'>
$(function() {
$('img.fade').hover(function() {
var src = $(this).attr("src").match(/[^\.]+/) + "_over.jpg";
$(this)
.animate({opacity:0},0)
.attr('src',src)
.stop()
.animate({opacity:1},1000);
}, function() {
var src = $(this).attr("src").replace("_over", "");
$(this)
.animate({opacity:0},0)
.attr('src',src)
.stop()
.animate({opacity:1},500);
});
});
</script>
5 ответов
Попробуйте этот код:
$(function() {
$("img.fade")
.mouseover(function() {
$(this).fadeTo('2000', 0);
})
.mouseout(function() {
$(this).fadeTo(2000, 1);
});
});
Проблема в том, что функция fadeOut() устанавливает свойство display вашего элемента равным none, поэтому DOM считает, что ваша мышь больше не взаимодействует с элементом, и вызывает функцию fadeIn(). Это постоянно. Функция fadeTo изменяет непрозрачность, но на самом деле не заставляет изображение идти своим чередом. Требуется два параметра, длительность и непрозрачность.
Для других также во главе здесь
Google+(Ignorance||rum) = me.
mouseenter + mouseleave может помочь с странным полупериодическим поведением, которое, по вашему мнению, может работать, например
var someElements = $('div.event-cell');
someElements.mouseenter(function () {
var targets= calEvents.not(this);
targets.fadeTo(1000, 0.3);
}).mouseleave(function () {
var targets = someElements.not(this);
targets.fadeTo(1000, 1);
});
Кажется, что mouseover и mouseout более инклюзивны, чем вы думаете, например, mouseout включает дочерние элементы.
I think = layman's opinion after rum :)
Смотрите демонстрационный раздел http://api.jquery.com/mouseover/
Мне кажется, что изображение исчезает, как только оно исчезает, что вызывает функцию отключения мыши. Попробуйте анимировать до 0,01 непрозрачности.
$(function() {
var img = ['imageA.jpg','imageB.jpg']
$('img.fade').hover(function() {
$(this)
.animate({opacity:0},0)
.attr('src',img[1])
.stop()
.animate({opacity:1},1000);
}, function() {
$(this)
.animate({opacity:0},0)
.attr('src',img[0])
.stop()
.animate({opacity:1},1000);
});
});
Вы можете попробовать это здесь
Если вы не хотите динамически переключать изображение и ДЕЙСТВИТЕЛЬНО хотите использовать фоновое изображение, вы можете воспользоваться всплывающими событиями...
HTML:
<div class="myClass" style="background: url(imageA.jpg);">
<img src="imageB.jpg" />
</div>
JQuery:
$('.myClass').hover(function(){
$(this).find('img').fadeOut(2000);
}, function(){
$(this).find('img').fadeIn(2000);
})
Не проверено, поэтому дайте нам знать, если это работает или нет.