2013-04-16 4 views
5

यहाँ मेरी jQueryjQuery माउसओवर mouseout पर चलता है

$('#samsungShine').mouseover(function() { 
    $('#samsungShineImage').animate({ 
     "margin-left": "304px" 
    }, 700); 
}).mouseout(function() { 
    $('#samsungShineImage').css("margin-left", "-304px"); 
}); 

है जब मैं माउस ले जाएंगे, यह उत्कृष्ट काम करता है, जब मैं mouseout, इसे रीसेट नहीं है, यह फिर से खेलता है माउसओवर ... यहाँ की एक बेला है समस्या आप देख सकते हैं तो मैं क्या मतलब है:

http://jsfiddle.net/2tujd/

+2

'mouseenter' घटना – Ian

+3

प्रयास करें और' कोशिश mouseleave' घटना – Dom

+1

आप बुदबुदाती मुद्दों कर रहे हैं, क्योंकि आपके माउसओवर हैंडलर एक नया div कि फिर एक और माउसओवर सक्रिय होगा परिचय देता है। – iGanja

उत्तर

4

भी stop का उपयोग कर इस प्रयास करें,:

DEMO

$('#samsungShine').mouseenter(function() { 
    $('#samsungShineImage').animate({"margin-left":"304px"}, 700); 
}).mouseleave(function(){ 
    $('#samsungShineImage').stop().css("margin-left", "-304px"); 
}); 
+2

यह सबसे अच्छा जवाब है, क्योंकि यह तुरंत एनीमेशन को रद्द कर देता है। – iGanja

+2

@IGanja यह 'on' का उपयोग करने के साथ" बेहतर "हो सकता है, लेकिन अगर यह मदद करता है तो यह बहस योग्य है। मैं बस स्पष्ट होने की तरह। लेकिन आप सही हैं, 'स्टॉप' का उपयोग बहुत महत्वपूर्ण है। – Ian

+1

हर कोई .on बैंडवैगन (कोई इरादा नहीं है, पर कूदना पसंद करता है) लेकिन अगर हम केवल एक तत्व के लिए बाध्यकारी हैं, तो एक स्पष्ट बाध्यकारी ठीक है, और तेजी से चल जाएगा। मैं पेशकश नहीं करना चाहता हूं। जब तक कि हम एक स्पष्ट एकाधिक बाध्यकारी स्थिति को संबोधित नहीं कर रहे हैं। – iGanja

8

बजाय mouseenter और mouseleave का प्रयास करें: http://jsfiddle.net/2tujd/11/

$('#samsungShine').mouseenter(function() { 
    $('#samsungShineImage').animate({ 
     "margin-left": "304px" 
    }, 700); 
}).mouseleave(function() { 
    $('#samsungShineImage').stop().css("margin-left", "-304px"); 
}); 

jQuery site पर, यह mouseover के लिए mouseout और simliarly उपयोग के बारे में कहते हैं:

इस घटना प्रकार कारण घटना बुदबुदाती के लिए कई सिर दर्द हो सकता है। उदाहरण के लिए, जब माउस पॉइंटर इस उदाहरण में आंतरिक तत्व से बाहर निकलता है, तो उस पर माउसआउट ईवेंट भेजा जाएगा, फिर बाहरी पर ट्राइकल करें। यह बाध्य माउसआउट हैंडलर को अप्रचलित समय पर ट्रिगर कर सकता है।

संपादित करें:mouseleave अंदर .stop() जोड़े यकीन है कि किसी भी वर्तमान एनीमेशन margin-left की स्थापना करने से पहले बंद कर दिया जाता है बनाने के लिए।

+3

अपने jsfiddle में, अगर मैं दोहराना और तेज़ छवि को दर्ज/छोड़ देता हूं, तो एनीमेशन कोई और काम नहीं करता है, यही कारण है कि आपको टिप के लिए भी –

+1

@roasted धन्यवाद का उपयोग करना चाहिए। – sweetamylase

+1

आपका स्वागत है sweetamylase –

-1

http://jsfiddle.net/2tujd/10/

मुझे लगता है कि इसके बेहतर सिर्फ एक हैंडलर का उपयोग करना। तो आपके पास एसिंक्रोनस विधियों के साथ कोई बुलबुला या समस्या नहीं है।

$('#samsungShine').mouseenter(function() { 
    $('#samsungShineImage').animate({ 
     "margin-left": "304px" 
    }, 700, function() { 
    $('#samsungShineImage').css("margin-left", "-304px") 
    }); 
}); 
+0

समझा जाए। ओपी चाहता है कि एनीमेशन पूर्ण हो जाए, *** म्यूज़ौट/मूसलेव *** पर रीसेट करने के लिए एनिमेट ***, एनीमेशन पूर्ण होने पर नहीं। – Dom

+0

इसका मतलब यह नहीं है कि यह सबसे अच्छा तरीका है? जब आप एक का उपयोग कर सकते हैं तो 2 हैंडलर का उपयोग क्यों करें? –

+0

प्लस आप मार्जिन-बाएं -304 नहीं करना चाहते हैं जब आपकी एनीमेशन +120 या कुछ पर हो। –

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