2013-10-05 66 views
0

我在测试mouseover事件时发现了一个问题。在下面的示例中,有一张图像,当您将鼠标悬停时,它会变大,当鼠标移出时,它会恢复到正常大小,但是当您快速将鼠标移过它多次时,它会越来越小好几次,就好像它已经记住了鼠标的每一次通过并且一直播放动画一遍又一遍。如何防止JavaScript多次应用鼠标悬停事件

这里是一个生动的例子:Here 保持快速移动鼠标移出和移出图像,然后拿走鼠标,你会看到。

回答

2

请允许我向您介绍CSS3,这使得jQuery的过时的东西:Demo

HTML:

<img src="......./Smiley.png" alt="smile" id="imgSmile" /> 

CSS:

#imgSmile { 
    width:200px; 
    transition:width 0.4s ease; 
} 
#imgSmile:hover { 
    width:250px; 
} 

JS:无!

+0

看起来更干净,任何副作用时使用CSS转换代替JavaScript?像浏览器兼容性? –

+0

“使jQuery过时”有点宽泛的陈述。 –

+1

@TechSupport不支持转场的浏览器只会让图像跳转到更大的尺寸。我认为用户更新浏览器的动机并不是故意忽略“更新可用”通知。 –

2

使用.stop()

$(this).stop().animate({width: "200px"}, 'fast'); 

http://jsfiddle.net/bR5cm/2/

+0

所以stop()会让悬停的对象停在它以前的状态,并从那个点上对它应用动画? –

+1

来自文档:当在元素上调用.stop()时,当前正在运行的动画(如果有)立即停止。 –

0

,而你的动画您可以添加一个类,并删除它一旦动画完成,且仅当类不应用于元素的运用新的动画。例如:

$(document).ready(function(){ 
     $('#imgSmile').width(200); 
     $('#imgSmile').mouseover(function() 
     { 
      if(!$(this).hasClass('animating')){ 
       $(this).css("cursor","pointer"); 
       $(this).addClass('animating'); 
       $(this).animate({width: "250px"}, 'slow',function(){ 
        $(this).removeClass('animating'); 
       }); 
      } 
     }); 

    $('#imgSmile').mouseout(function() 
     { 
      $(this).animate({width: "200px"}, 'slow'); 
     }); 
    }); 

演示:http://jsfiddle.net/bR5cm/3/

+0

这种方式并没有给出一个好的解决方案,尝试徘徊好几次,然后拿走鼠标并尝试再次悬停,直到一段时间后,动画才会播放。 –

相关问题