jquery

2010-09-14 7 views
5
siteme Bu kodu kullanıyorum

yılında mouseLeave için gecikme ekleyin ve ben Sen setTimeout() kullanabilirsinizjquery

$target.mouseenter(function(e){ 
       var $tooltip=$("#"+this._tipid) 
       ddimgtooltip.showbox($, $tooltip, e) 
      }) 
      $target.mouseleave(function(e){ 
      var $tooltip=$("#"+this._tipid); 
      setTimeout(function() { ddimgtooltip.hidebox($, $tooltip); }, 4000); 
      }) 

      $target.mousemove(function(e){ 
       var $tooltip=$("#"+this._tipid) 
       ddimgtooltip.positiontooltip($, $tooltip, e) 
      }) 
      if ($tooltip){ //add mouseenter to this tooltip (only if event hasn't already been added) 
       $tooltip.mouseenter(function(){ 
        ddimgtooltip.hidebox($, $(this)) 
       }) 

cevap

2

mouseLeave fonksiyonu ve bunun için anonim bir işleve bir gecikme eklemek nasıl merak ediyorum:

$target.mouseleave(function(e){ 
var $tooltip=$("#"+this._tipid); 
setTimeout(function() { ddimgtooltip.hidebox($, $tooltip); }, 250); 
}) 

Bu, saklanmadan önce ayrıldıktan sonra 250 ms geciktirir, yalnızca bu değeri gerektiği gibi ayarlayabilirsiniz.

+0

Teşekkür ederim bu harika, şimdi farz edersem başka bir tane o zaman aşımı atlayabilirim? –

+0

@Dustin - Evet, ama diğer elementler için 'mouseenter 'işlevini tam olarak görmeden tam olarak ne diyeceğimi söyleyemem, soruna biraz daha fazla bağlam eklemeliyim. –

+0

Kodu sizin için daha güncelledim, yardımınız için teşekkürler –

10

Yalnızca bir zamanlayıcı ile ilgili sorun, siz fareyi sola döndürdüyseniz ve daha sonra yeniden girdiğinizde, bu zamanlayıcı tamamlandıktan sonra gizlenmeye devam eder. Aşağıdaki gibi bir şey daha iyi çalışabilir çünkü fare hedefe her girdiğinde zamanlayıcıyı iptal edebiliriz.

var myTimer=false; 
$target.hover(function(){ 
    //mouse enter 
    clearTimeout(myTimer); 
}, 
function(){ 
    //mouse leave 
    var $tooltip=$("#"+this._tipid); 
    myTimer = setTimeout(function(){ 
     ddimgtooltip.hidebox($, $tooltip); 
    },500) 
}); 
+0

Ne demek istediğimi anladım, sadece ilk işlevi test ettim ve tam olarak ne söylediğini yaptın, yardım edebilir misin? Önerilen değişiklikleri yapmak için düzenlenmiş yayınlarımı düzenleyebilir miyim? İptal mantığı için –

+0

+1. Muhtemelen $ target.one ("vurgulu", function() ... 'nın ateş edildikten sonra olaydan kurtulmak için olması gerektiğini düşünüyorum. –

4
(function($){ 
    $.fn.lazybind = function(event, fn, timeout, abort){ 
     var timer = null; 
     $(this).bind(event, function(){ 
      timer = setTimeout(fn, timeout); 
     }); 
     if(abort == undefined){ 
      return; 
     } 
     $(this).bind(abort, function(){ 
      if(timer != null){ 
       clearTimeout(timer); 
      } 
     }); 
    }; 
})(jQuery); 


$('#tooltip').lazybind(
    'mouseout', 
    function(){ 
     $('#tooltip').hide(); 
    }, 
    540, 
    'mouseover'); 

http://www.ideawu.com/blog/2011/05/jquery-delay-bind-event-handler-lazy-bind.html

+0

Mükemmel çalışıyor. En iyi çözüm benim gibi görünüyor :) JQuery için güzelce paketlenmiş ayrıca Başparmak havaya! – EinLama

0

Biliyorsun sadece yazdım bu işlevi kullanabilirsiniz:

$.fn.hoverDelay = function(handlerIn, handlerOut, delay) { 
    if(delay === undefined) delay = 400; 
    var timer; 
    this.hover(function(eventObject) { 
     clearTimeout(timer); 
     handlerIn.apply(this,eventObject); 
    }, function(eventObject) { 
     timer = setTimeout(handlerOut.bind(this, eventObject), delay); 
    }); 
}; 

fare izni olaydır önce 400ms gecikme olduğunu tek farkı sadece normal $.hover gibi çalışır çağrıldı (farenizi bu zaman dilimi içinde geri taşırsanız iptal edilir).