jQuery检测鼠标停留在元素上的秒数
有没有办法检测鼠标指针停留在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(); } } });
问题是它不起作用:(
另外我想绑定一个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 }
您应该能够利用hover()
函数捕获鼠标何时越过特定元素,然后在从该对象移除鼠标时根据需要做出反应。
$("#someDiv").hover(function(){ //start counter }, function(){ //stop counter });
鉴于此标记:
Hover over me
像这个插件这样的东西可以做到这一点:
(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);
和调用代码:
$('#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 } );
实例: 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 });
此代码将计算您使用鼠标hover在元素上的时间(以毫秒为单位):
$(document).ready(function() { $('#element').bind('mouseenter mouseleave', function(evt) { var currentTime == new Date(); if (evt.type === 'mouseenter') { $(this).data('mouseenterTime') == currentTime.getTime(); } else if (evt.type === 'mouseleave') { var mouseoverTime = currentTime.getTime() - $(this).data('mouseenterTime'); alert('mouseover time was: ' + mouseoverTime); } }) });
我用C. Spencer Beggs的答案作为模板,因为他的那个不适合我。 我使用了简单的变量,包括许多console.log消息,并将’==’代码更正为’=’。 此示例将在执行前等待3秒“hover在链接上”操作。 HTH有人。
var mouseenterTime = 0; $(document).on('mouseenter mouseleave', '#element', function (evt) { var currentTime = new Date(); if (evt.type === 'mouseenter') { mouseenterTime = currentTime.getTime(); console.log('mouseenterTime (#1): ' + mouseenterTime); } else if (evt.type === 'mouseleave') { console.log('mouseenterTime (#2): ' + mouseenterTime); var mouseoverTime = currentTime.getTime() - mouseenterTime; console.log('mouseover time was: ' + mouseoverTime); // Checking if the Hover action has latest for longer than 3 seconds. if(mouseoverTime > 3000) {console.log("Three seconds have elapsed")} } })