2011-12-12 15 views
5

मेरे पास कोड का एक टुकड़ा है जो मूल रूप से कहता है: यदि आप इसे रोल करते हैं, तो दूसरी चीज दिखाई देती है और यदि आप रोल आउट करते हैं तो यह गायब हो जाएगा।माउस को रोकने/छोड़ने के लिए कितनी बार

समस्या यह है कि अगर मैं माउस लेने के लिए और/बाहर कई बार ऊपर रोल तो तत्व दिखाई देता है/गायब हो जाता है कई बार (क्योंकि मैंने गलती से इसके लिए घटनाओं का एक बहुत बनाया है)

मेरी कोड है ऐसा लगता है:

$('div.accordionContent').mouseenter(function() 
{ 
    $(this).find(".something").animate({left: 0}, 300)}).mouseleave(function() { 
    $(this).find(".something").animate({ 
    left: -200}, 500);; 
}); 

एकाधिक होवरिंग से बचने के लिए मैं इसे कैसे कहूं?

मैं jQuery 1.4.3 का उपयोग यह है कि अगर मदद करता है ..

उत्तर

5

बल्कि ट्रिगर कई परहेज से, एक और शुरू करने से पहले एनीमेशन रोक प्रयास करें।

$('div.accordionContent').mouseenter(function() { 
    $(this).find(".something").stop().animate(...) 
}); 
+0

अच्छा विकल्प! यहां तक ​​कि मैंने इसे अपने कोड में भी लागू किया है। – Murtaza

+0

मेरे मामले में, मैं एनीमेशन का उपयोग नहीं कर रहा हूं (केवल क्लासनाम जोड़ना/हटा रहा हूं) और इसलिए 'स्टॉप' का उपयोग नहीं कर सकता। इसके लिए कोई समाधान? – apnerve

1

समस्या यह है कि पुराने लोगों के समाप्त होने से पहले आप नई घटनाओं को आग लगाना चाहते हैं। इसे रोकने के लिए आप भविष्य की घटनाओं के लिए सुनने (श्रोताओं को हटा दें) बंद कर सकते हैं जब तक कि वर्तमान घटनाओं ने अपने कार्यों को पूरा नहीं किया हो।

0

jQuery.animate में एक विकल्प "कतार" है। यदि आप इसे false पर सेट करते हैं, तो मुझे लगता है कि ईवेंट उतना ही ट्रिगर नहीं होगा। मैं = लगता है)

0

यह सही तरीके से करना यदि आप चाहते हैं, मैं सुझाव है कि यह

$('div.accordionContent').bind('mouseenter mouseleave', function(e){ 

    var $something = $(this).find(".something"); 

    if(e.type == 'mouseenter'){ 
     $something.animate({left:0}, {queue:false, duration:300 }); 
    } else { 
     $something.animate({left:-200}, {queue:false, duration:500 }); 
    } 
}); 
0

आप कोशिश कर सकते हैं यह एक:

$('div.accordionContent').mouseenter(function(){ 
    var div = $(this); 
    clearTimeout(window.me); 
    window.me = setTimeout(function(){ 
     div.find(".something").animate({left: 0}, 300)}).mouseleave(function(){ 
      $(this).find(".something").animate({ 
      left: -200}, 500); 
     }); 
    },50); 
}); 

विचार यहाँ अगर वर्तमान mouseenter रद्द करने के लिए है 50 देरी अभी तक नहीं पहुंची है।

संबंधित मुद्दे