2012-07-03 33 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

相關問題