2009-12-07 16 views
11

मैं अगर माउस इस परिदृश्य में तत्व पर अब भी है पता लगाने में सक्षम होना चाहते हैं:jQuery: माउस अभी भी तत्व पर है?

  1. माउसओवर तो कुछ सेकंड के लिए सोने के हैं।
  2. एक बार माउस की नींद की जांच करने के बाद भी एक ही तत्व पर है।
  3. यदि सत्य है तो कुछ करें।

मैं # 2 कैसे प्राप्त कर सकता हूं?

धन्यवाद।

जब आप तत्व पर .hover() निर्धारित करते हैं, आप इसे करने के लिए 2 कार्यों पारित कर सकते हैं:

+0

"नींद" – PetersenDidIt

+1

पेटर्सेंडिडिट के दौरान आप क्या कर रहे हैं: कुछ भी नहीं, यह सिर्फ एक टाइमआउट है। – thedp

+0

क्या होगा यदि माउस टाइमआउट पर "एक ही तत्व पर फिर से" हो? क्या यह "एक ही तत्व पर अभी भी" के रूप में गिना जाता है? –

उत्तर

15

jQuery के लिए hoverIntent प्लगइन पर एक नज़र डालें। यह आपको एक नया इवेंट हैंडलर देता है जो केवल तभी आग लग जाएगा जब आप किसी निश्चित समय के लिए तत्व पर होवर कर रहे हों। अपने विकल्पों को बदलकर, आप इसे वही करने में सक्षम होना चाहिए जो आप चाहते हैं।

+1

+1 उपयोगी प्लगइन – alex

+0

मुझे इस प्लगइन से प्यार है! आपको बहुत बहुत धन्यवाद। – thedp

+0

होवरइन्टेंट के लिए एक समान प्लग-इन यहां है http://blog.threedubmedia.com/2008/08/eventspecialhover.html, केवल वही निर्भर करता है जो आपको चाहिए। दोनों परीक्षण के लायक हो सकता है। – Nooshu

2

यहाँ एक तरीका है। जब माउस तत्व पर होता है तो पहला व्यक्ति आग लग जाएगा, दूसरी बार आग लगती है जब माउस बाहर निकलता है।

पहला फ़ंक्शन currentElementId (या कुछ अन्य ध्वज) सेट कर सकता है और दूसरा फ़ंक्शन इसे साफ़ कर देगा। इस तरह आपको केवल एक चीज की आवश्यकता है यह जांचना है कि currentElementId खाली है या नहीं।

+0

यदि तत्व पर ध्यान केंद्रित नहीं किया गया है तो वास्तव में currentElementId प्राप्त कर सकते हैं? केवल माउस को ऊपर ले जाकर? – thedp

+1

आप किसी भी घटना पर उस आईडी को सेट कर सकते हैं, FOCUS() का उपयोग यहां देखें: http://docs.jquery.com/Events/focus –

1

आप सेट समय के बाद फ़ंक्शन को कॉल करने के लिए setTimeout('sleep', sleep_time) का उपयोग कर सकते हैं।

ईवेंट हैंडलर को ऑन-हाउसओवर और ऑनसाउसआउट पर असाइन करें।

ये हैंडलर यह जांचने के लिए ध्वज संशोधित करते हैं कि माउस अभी भी तत्व पर है या नहीं।

नींद समारोह के अंदर, आप ध्वज की जांच कर सकते हैं, और बस इसे वापस कर सकते हैं।

+2

ध्यान देने योग्य एक बात यह है कि 'onmouseover' ईवेंट तब तक आग नहीं लगाता है माउस वास्तव में चल रहा है। यदि उपयोगकर्ता का माउस अभी भी है, लेकिन तत्व पर, यह ट्रिगर नहीं किया जाएगा।अगर मैं गलत हूं, तो मुझे सही करो। – donut

+0

आप लगभग 100% सही हैं! यही कारण है कि मैं सवाल पूछ रहा हूँ। मैंने होवर और माउसओवर के 2 स्तरों के साथ खेलने की कोशिश की लेकिन फिर मैंने देखा कि आपने अभी क्या कहा है: माउसओवर ईवेंट केवल शीर्ष स्तर के लिए निकाल दिया गया है। और जब तक मैं माउस को तत्व से बाहर नहीं ले जाता और फिर वापस लौटाता हूं, तो घटना फिर से आग नहीं होती है। तो यहां मुख्य प्रश्न, मैं इस कष्टप्रद मुद्दे को कैसे हल कर सकता हूं? – thedp

10

बस यह बताने के लिए एक ध्वज का उपयोग करें कि माउस उस पर है या नहीं।

var mouseover = false; 
$('.thing').mouseenter(function(){ 
    mouseover = true; 
}).mouseleave(function(){ 
    mouseover = false; 
}); 
+0

मैंने जो कुछ कहा वह काफी है। –

+0

मेरे पास अभी भी वही समस्या है जो मेरे खराब प्रयासों में है: मैं यह बताने में सक्षम होना चाहता हूं कि माउस टाइमआउट के बाद भी वहां है या नहीं, और यदि यह तत्व पर नहीं है तो कुछ भी नहीं करें। – thedp

+0

यदि (माउसओवर) {// फिर कुछ जानना कि माउस आइटम पर है} – PetersenDidIt

37

यह काम करने के लिए (http://jsbin.com/uvoqe)

$("#hello").hover(function() { 
    $(this).data('timeout', setTimeout(function() { 

    alert('You have been hovering this element for 1000ms'); 

    }, 1000)); 
}, function() { 

    clearTimeout($(this).data('timeout')); 

}); 
+6

यह वास्तव में एक प्लगइन –

+0

चालाक समाधान का उपयोग करने से एक चालाक/स्पष्ट तरीका है। –

+1

शानदार। आप "अनहोवर" फ़ंक्शन पर एक दूसरा टाइमआउट भी जोड़ सकते हैं ताकि अनवरोधित ईवेंट को स्लाइड-आउट मेनू की तरह कुछ जल्दी बंद करने से रोक सके। – pbarney

1

मैं जैसे ही मैं करने के लिए जाना एक div और फिर hover घटना पर मैं इस का समय समाप्त गुण सेट और दिखाने के लिए एक हाइपरलिंक इस्तेमाल किया लगता है मेरी div मैं स्पष्ट टाइमआउट और div को फीका करने के लिए div के hover फ़ंक्शन का उपयोग शुरू करें। उम्मीद है इससे आपको मदद मिलेगी।

<script type="text/javascript"> 
    $(document).ready(function() { 
     var obj; 
     $("a").hover(function() { 
      if ($("#div1").is(":hidden")) { 
       $("#div1").fadeIn(300).show(); 
      } 
     }, function() { 
      obj = setTimeout("jQuery('#div1').fadeOut(300);", 300); 
     }); 

     $("#div1").hover(function() { 
      clearTimeout(obj); 
      if ($("#div1").is(":hidden")) { 

       $("#div1").show(); 
      } 
     }, function() { 
      jQuery('#div1').fadeOut(300); 
     }); 
    }); 
</script> 
संबंधित मुद्दे