Бесконечное замирание с эффектом ролловера изображений 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);
  });
});

Вы можете попробовать это здесь

Ссылка: .hover (), .stop ()

Если вы не хотите динамически переключать изображение и ДЕЙСТВИТЕЛЬНО хотите использовать фоновое изображение, вы можете воспользоваться всплывающими событиями...

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);
})

Не проверено, поэтому дайте нам знать, если это работает или нет.

Другие вопросы по тегам