1

我的意图是用漂亮的淡入淡出效果替换图像:我有一个图像 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>
4

5 回答 5

0
$(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()

于 2010-09-15T16:11:57.100 回答
0

对于其他人也在这里领导

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/

于 2011-10-30T07:38:43.350 回答
0

如果您不想动态切换图像并且真的想继续使用背景图像,您可以利用事件冒泡......

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

未经测试,所以让我们知道它是否有效。

于 2010-09-15T16:23:51.253 回答
0

试试这个代码:

 $(function() {
        $("img.fade")
            .mouseover(function() { 
            $(this).fadeTo('2000', 0);                          
            })
            .mouseout(function() {
            $(this).fadeTo(2000, 1);                                   
            });
});  ​

问题是fadeOut() 函数将元素的显示属性设置为none,因此DOM 认为您的鼠标不再与元素交互,并调用fadeIn() 函数。它不断循环。fadeTo 函数改变了不透明度,但它实际上并没有使图像变通。它需要两个参数,持续时间和不透明度。

于 2010-09-15T15:36:38.090 回答
0

在我看来,图像一旦淡出就会消失,这会触发 mouseout 功能。尝试将动画设置为 0.01 不透明度。

于 2010-09-15T15:38:46.560 回答