2010-07-25 8 views
20
$('.file a').live('mouseenter', function() { 
    $('#download').stop(true, true).fadeIn('fast'); 
}).live('mouseleave', function() { 
    $('#download').stop(true, true).fadeOut('fast'); 
}); 

मैं mouseenter फ़ंक्शन stop() और 1 सेकंड की देरी के लिए चाहता हूं। तो, यदि मैं #download पर होवर करता हूं तो fadeIn को 1 सेकंड की देरी के बाद शुरू करना चाहिए। यदि मैं इस बीच माउस fadeIn शुरू नहीं करना चाहिए। मुझे मिलना?देरी() या स्टॉप() के साथ टाइमआउट?

मुझे वास्तव में यह नहीं पता कि यह कैसे करना है, कोई विचार?

+0

@ user239831 - क्या आपके पास इस पर एक उत्कृष्ट सवाल है? –

उत्तर

25

इस मामले में आपको setTimeout() का उपयोग करने की आवश्यकता है क्योंकि .delay() काम करता है (और इसे रद्द करने में आपकी अक्षमता)।

$('.file a').live('mouseenter', function() { 
    $.data(this, 'timer', setTimeout(function() { 
     $('#download').stop(true, true).fadeIn('fast'); 
    }, 1000)); 
}).live('mouseleave', function() { 
    clearTimeout($.data(this, 'timer')); 
    $('#download').stop(true, true).fadeOut('fast'); 
}); 

You can give it a try here

आप .delay() का उपयोग करते हैं यह तत्व के लिए अगले एनीमेशन, अगर आपको लगता है कि कतार में पहले को मंजूरी दे दी की परवाह किए बिना विपंक्ति करेंगे। तो आपको एक टाइमआउट की आवश्यकता है कि आप रद्द कर सकते हैं, जो उपर्युक्त मैन्युअल रूप से setTimeout() पर कॉल करके और $.data() के साथ परिणाम संग्रहीत कर रहा है ताकि आप clearTimeout() के माध्यम से इसे बाद में साफ़ कर सकें।

+2

+1 स्वच्छ और सीधा-आगे समाधान। – Tomalak

+0

उत्कृष्ट। देरी के बारे में यह बहुत महत्वपूर्ण है। मुझे अभी भी रद्द करने का कोई तरीका नहीं है जिसका मतलब है कि इसका उपयोग बहुत सावधानी से किया जाना चाहिए। इससे निपटने का यह एक शानदार तरीका था। धन्यवाद। – Jake

+0

हाय। मैं 'स्लाइडिंग()' और 'स्लाइडअप()' के लिए [jsfiddle.net/GZV5V/84/) में वही कोशिश कर रहा हूं, लेकिन यह अच्छी तरह से काम नहीं करता है। क्या आप कृपया मुझे बता सकते हैं कि मैं यहां क्या खो रहा हूं? नोट: मैं 'hoverIntent() 'फ़ंक्शन का उपयोग किये बिना इसे करने का प्रयास कर रहा हूं। – hims056

3

एक setTimeout सुविधा

$('.file a').live('mouseenter', function() { 
setTimeout(function(){ 
    $('#download').stop(true, true).fadeIn('fast'); 
}, 1000); 
}).live('mouseleave', function() { 
    $('#download').stop(true, true).fadeOut('fast'); 
}); 

setTimeout का प्रयोग करें (इस मामले 1000 में) निर्दिष्ट मिलीसेकंड के बाद समारोह के अंदर कोड को निष्पादित करेंगे।

+1

आपको उस टाइमआउट को भी स्टोर/साफ़ करने की आवश्यकता है, यदि आप तेजी से अंदर और बाहर होवर करते हैं, तो यह 200ms में fadeOut() (यदि यह बिल्कुल चलता है) को पूरा करेगा, तो 800ms बाद में एक कतारबद्ध फीडइन होगा, भले ही आप ' तत्व पर फिर से नहीं। मेरा मतलब यह देखने के लिए यहां देखें: http://jsfiddle.net/nick_craver/T9t6N/ परीक्षण करने के लिए, जल्दी से होवर करें और लिंक छोड़ दें। –

0

आप इसे विलंब घटना के बिना jquery पर उपयोग कर सकते हैं।

$('.file a').hover(function() { 
    time = setTimeout(function() { 
    $('#download').fadeIn(); 
    },1000); 
},function(){ 
    clearTimeout(time); 
}); 

1000 आपका समय है कि उसके बाद $ ('# डाउनलोड') फीका होगा।

4

मैं एक ऐसी ही सवाल का जवाब के लिए देख रहा था, और मुझे लगता है कि .animate() भी इस संभाल करने के लिए इस्तेमाल किया जा सकता है, और यह .stop का अनुसरण करता है()

वह कुछ इस तरह दिखेगा पाया:

$('.file a').live('mouseenter', function() { 
    $('#download') 
     .stop(true, true) 
     .animate({opacity:0}, 1000);   // one second delay 
     .animate({opacity:1}, 'fast', 'swing'); 
}).live('mouseleave', function() { 
    $('#download') 
     .stop(true, true) 
     .animate({opacity:0}, 'slow', 'swing'); 
}); 
संबंधित मुद्दे