2012-07-03 31 views
0

所以,我有这种类型的情况,但我只想“做些什么”,如果用户“mouseleave(s)”超过x时间,比如说一秒钟。我应该如何实现?如何激活mouseleave,如果它已经x时间?

$("#someElement, #someOtherElement").mouseleave(function() { 
    // Do something. 
}); 

后来我又说:

$('.popover3-test').popover({ 
     placement:'bottom', 
     template: $('.popover2'), 
     trigger: 'manual', 

     }).mouseenter(function(e) { 
     $(this).popover('show'); 

     $(".popover3-test, .popover2").each(function() { 
      var t = null; 

      $(this) 
       .mouseleave(function() { 
        t = setTimeout(function() { 
         $('.popover2').hide(); 
        }, 1000); // Or however many milliseconds 
       }) 
       .mouseenter(function() { 
        if(t !== null) 
         clearTimeout(t); 
       }) 
      ; 
     }); 


}); 
+0

你尝试过什么?你是怎么意思的 - 从鼠标离开的时间点开始,直到其他事件?如果是这样,那是什么事? – Utkanos

回答

5

setTimeout应该做的伎俩:

$("#someElement, #someOtherElement").each(function() { 
    var t = null; 

    $(this) 
     .mouseleave(function() { 
      t = setTimeout(function() { 
       // Do something. 
      }, 1000); // Or however many milliseconds 
     }) 
     .mouseenter(function() { 
      if(t !== null) { 
       clearTimeout(t); 
       t = null; 
      } 
     }) 
    ; 
}); 

编辑:如果你想让它在任何工作,只是删除.each

var t = null; 

$("#someElement, #someOtherElement") 
    .mouseleave(function() { 
     t = setTimeout(function() { 
      // Do something. 
     }, 1000); // Or however many milliseconds 
    }) 
    .mouseenter(function() { 
     if(t !== null) { 
      clearTimeout(t); 
      t = null; 
     } 
    }) 
; 
+0

++ 1确实,对你来说!并让我知道我错过了什么,':)' –

+0

感谢大家,但它似乎“做些什么”,在这种情况下隐藏弹出窗口,1000后,当我将鼠标从#element1移动到#element2。这可能是我的代码有问题,我会提出我的问题。 – dezman

+0

@watson:哦,好的。看到更新,然后:) – Ryan

2

这可能不是因为是工作,但给你的一些想法......

var elapsed = 0; 
var timer = setInterval(function(){ 
    elapsed += 20; 
    if(elapsed >= 1000) { 
    doSomething(); 
    clearInterval(timer); 
    } 
}, 20); 
$('#some').mouseleave(timer); 
$('#some').mouseenter(function(){clearInterval(timer);elapsed=0;}); 
+0

我其实只是没有想到clearTimeout。但我喜欢我的方式读取 – mindandmedia

3
$("#someElement, #someOtherElement").bind('mouseenter mouseleave', (function() { 

    var timer; 

    return function (e) { 

     if(e.type === 'mouseleave') { 
      timer = setTimeout(function() { 
      //do something 
      }, 1000); 
     } else { 
      clearTimeout(timer); 
     } 

    }; 

}())); 

编辑 - 可对多个元素

$("#someElement, #someOtherElement").bind('mouseenter mouseleave', function (e) { 

     var timer = $(this).data('timer'); 

     if(e.type === 'mouseleave') { 
      timer = setTimeout(function() { 
      //do something 
      }, 1000); 
     } else { 
      clearTimeout(timer); 
     } 

     $(this).data('timer', timer);  
    }; 

}); 
+0

'setInterval'?我想你的意思是'setTimeout'。大概。 – Ryan

+0

正确 - 谢谢 –

+0

这会遇到与minitech相同的问题,它们只能在重新加载时工作一次,然后在从元素1滑动到元素2时不起作用。 – dezman

相关问题