jQuery检测鼠标停留在元素上的秒数

its*_*sme 3 javascript jquery mouseover jquery-plugins mouseevent

有没有办法检测鼠标指针停留在html元素上的秒数?

我想检索鼠标停留在元素上的秒数,以便在回调事件上稍微延迟...如果可能的话:)

我正在尝试通过计数器进行简单的for()循环检测:

var time_over ; 
$('.bean-active').live('mouseover',function(){  
  id_tag = $(this).attr("id");   
  for(time_over = 1;time_over <= 3000;time_over ++){
      if(time_over == 3000){
         $('.bean-bubble,.bean-bubble img').hide();   
         $('#bean-bubble-'+id_tag+',#bean-bubble-'+id_tag+' img').show();
      }  
  }   
});
Run Code Online (Sandbox Code Playgroud)

问题是它不起作用:(

另外我想绑定一个mouseleave事件,脚本逻辑应该是:

while ( mouseover element count how many time it stays over) 
  if (time == n)
  { do somenthing } 
if (mouseleave from element earlier then time)
{ do somenthing different }
Run Code Online (Sandbox Code Playgroud)

Jam*_*iec 7

鉴于此标记:

<div id="hoverOverMe">Hover over me</div>
<div id="output"></div>
Run Code Online (Sandbox Code Playgroud)

像这个插件这样的东西可以做到这一点:

(function($) {
    $.fn.delayedAction = function(options)
    {
        var settings = $.extend(
            {},
            {
                delayedAction : function(){},
                cancelledAction: function(){},
                hoverTime: 1000               
            },
            options);

        return this.each(function(){
           var $this = $(this);
            $this.hover(function(){  
               $this.data('timerId',
                          setTimeout(function(){
                                      $this.data('hover',false);
                                      settings.delayedAction($this);
                                      },settings.hoverTime));
                $this.data('hover',true);
            },
            function(){        
                if($this.data('hover')){       
                    clearTimeout($this.data('timerId'));
                    settings.cancelledAction($this);
                }
                $this.data('hover',false);
            } );
        });
    }
})(jQuery);
Run Code Online (Sandbox Code Playgroud)

和调用代码:

$('#hoverOverMe').delayedAction (
    {
        delayedAction: function($element){
            $('#output').html($element.attr('id') + ' was hovered for 3 seconds');
        },
        cancelledAction: function($element){
            $('#output').html($element.attr('id') + ' was hovered for less than 3 seconds');
        },
        hoverTime: 3000 // 3 seconds
    }
);
Run Code Online (Sandbox Code Playgroud)

实例:http://jsfiddle.net/nrUqS/

根据您的要求,这样的东西就足够了:

$('.bean-active').delayedAction(
{ 
   delayedAction: function($element){  
       id_tag = $element.attr("id");   
       $('.bean-bubble,.bean-bubble img').hide();   
       $('#bean-bubble-'+id_tag+',#bean-bubble-'+id_tag+' img').show();
    },
    hoverTime: 3000
});
Run Code Online (Sandbox Code Playgroud)