在一组img上取消绑定悬停事件

时间:2011-12-23 13:00:23

标签: jquery hover each unbind

我的一组图片有问题。我的目的是在您悬停缩略图时显示相关图像,并在您滚动图像时隐藏它。问题是我需要在模块设计的悬停上加上延迟(),有3列,很难到达中间列的图像。此延迟使悬停排队,显示其他与您悬停的其他拇指相关的图像。这是标记:

<ul id="module">
  <li>
     <a href="#">
      <img src="thumbnail-image-1.jpg"> 
      <img src="image-1.jpg">
    </a>
  </li>
  <li>
    <a href="#">
      <img src="thumbnail-image-2.jpg"> 
      <img src="image-2.jpg">
    </a>
  </li>
  ...
</ul>

这是js:

$('#module li a').each(function(i){
    $_imgs = $(this).find('img');
    $_imgs.eq(0).mouseover(function() {
        $(this).next().delay(800).fadeIn('slow');
    });
    $_imgs.eq(1).mouseout(function() {
        $(this).fadeOut('slow');
    });
});

我认为解决方案来自于放置unbind()...... 感谢。

3 个答案:

答案 0 :(得分:1)

使用setTimeout()导致延迟。 setTimeout返回一个唯一ID,使用此ID可以调用clearTimeout(id)并在mouseout上清除计时器。

答案 1 :(得分:1)

我将.tn类添加到缩略图中,但如果需要,可以将其更改为.eq解决方案。

Javascript(需要jQuery 1.7)

$(function(){

    var timeout = false;

    $('#module > li').on('hover', 'a', function(e){
        var $elem = $(this).find('.tn');
        if(e.type == 'mouseenter'){
            timeout = setTimeout(function(){
                $elem.fadeIn();
            }, 800);   
        }
        else{
            timeout && clearTimeout(timeout);
            $elem.stop().fadeOut();
        }
    });

});

看到它在这里工作: http://jsfiddle.net/aX836/

答案 2 :(得分:0)

试试这个:

$('#module li a').each(function(i){
    var $_imgs = $(this).find('img'), timeout, $next;
    $_imgs.eq(0).mouseover(function() {
        clearTimeout(timeout);
        $next = $(this).next();
        timeout = setTimeout(function() {
            $next.fadeIn('slow');
        }, 800);
    });
    $_imgs.eq(1).mouseout(function() {
        $(this).fadeOut('slow');
    });
});