2012-10-10 27 views
1

我有一段代码在mouseout上隐藏了一个元素。setTimeout()之后检查是否仍然鼠标移出

的代码看起来是这样的:

var myMouseOutFunction = function (event) { 

    setTimeout(function() { 

    $(".classToHide").hide(); 

    $(".classToShow").show(); 

    }, 200); 

}; 

这将产生非常接近我想要做的结果。但是,我想等待超时时间(在本例中为200毫秒),然后检查鼠标是否仍然“不在”该元素。如果是这样,我想在所需的元素上执行.hide()和.show()。

我想这样做,因为如果用户稍微粘贴出来然后快速粘贴回来,我不希望元素闪烁(意思是:隐藏然后显示真正快),当用户只是想看到元素。

+0

如果这个问题回答,请随时接受最适合的答案。 –

回答

1

详图Kolink答案

DEMO:http://jsfiddle.net/EpMQ2/1/

var timer = null; 
element.onmouseout = function() { 
    timer = setTimeout(function() { 
     $(".classToHide").hide(); 
     $(".classToShow").show(); 
    }, 200); 
} 

element.onmouseover = function() { 
    clearTimeout(timer); 
} 
6

将超时的返回值分配给变量,然后在onmouseover事件中使用clearTimeout

+0

+1。 clearTimeout位非常大。我已经开始在Backbone应用程序中执行类似的操作,以重复由setInterval触发的AJAX调用。在初始通话开始清除间隔之前,出现了很多非常'怪异'的行为。 –

1

你应该使用jQuery的mouseentermouseleave。 mouseenter和mouseleave只会被调用一次,并使用一个标志来检查是否再次调用mouseenter

var isMouseEnter ; 
    var mouseLeaveFunction = function (event) { 
     isMouseEnter = false; 
     setTimeout(function() { 
      if(isMouseEnter){ return;} 
      $(".classToHide").hide(); 

       $(".classToShow").show(); 

      }, 200); 
    }; 
    var mouseEnterFunction = function(){ 

     isMouseEnter = true; 
    } 
1

使用布尔标志:

var mustWait = true; 
var myMouseOutFunction = function (event) { 

    setTimeout(function() { 
     if(mustWait){ 
      mustWait = false; 
     } 
     else{ 
      $(".classToHide").hide(); 
      $(".classToShow").show(); 
      mustWait = true; 
     } 
    }, 200); 
}; 
相关问题