2011-08-24 19 views
5

पर कुछ बार ट्रिगर करती है मेरे पास एक नेस्टेड अवधि के साथ एक साधारण गैलरी ग्रिड है जो शीर्षक दिखाता है, जिसे मैं माउस पर स्लाइड करना चाहता हूं, और माउस पर छिपाना चाहता हूं।jquery माउस होवर प्रभाव बग, माउसओवर घटना हमेशा माउसआउट

सबकुछ ठीक काम करता है, सिवाय इसके कि जब भी माउस शीर्षक पर जाता है और/या टाइल के नीचे से टाइल से बाहर निकलता है, तो होवर प्रभाव कुछ बार अनियंत्रित रूप से दोहराता है।

पहले मैंने सोचा कि ऐसा हो सकता है क्योंकि अवधि एंकर के भीतर निहित है जो होवर ट्रिगर है, लेकिन इसे बाहर ले जाना भी काम नहीं करता है।

कोई विचार?

डेमो यहाँ है: http://www.winterealm.com/gallery/

मार्कअप:

<div class="gallery_container"> 
    <ul> 
     <li><a href=""><img src="assets/img/artistisch.jpg" alt="aaa"/><span class="title">Category A</span></a></li> 
     <li><a href=""><img src="assets/img/attraktiv.jpg" alt="bbb"/><span class="title">Category B</span></a></li> 
     <li><a href=""><img src="assets/img/historisch.jpg" alt="ccc"/><span class="title">Category C</span></a></li> 
     <li><a href=""><img src="assets/img/popart.jpg" alt="ddd"/><span class="title">Category D</span></a></li> 
     <li><a href=""><img src="assets/img/portrait.jpg" alt="eee"/><span class="title">Category E</span></a></li> 
     <li><a href=""><img src="assets/img/sketch.jpg" alt="fff"/><span class="title">Category F</span></a></li> 
    </ul> 
</div> 

यहाँ jQuery

$(document).ready(function(){ 
    $('.gallery_container a').mouseover(function(){ 
     $(this).children('.title').animate({ 
      opacity: 100, 
      bottom: 0 
     },200); 
    }); 

    $('.gallery_container a').mouseout(function(){ 
     $(this).children('.title').animate({ 
      opacity: 0, 
      bottom: -30 
     },200); 
    }); 
}); 

उत्तर

8

समस्या यह है कि जब भी माउस तत्व या बच्चे तत्वों पर माउस चलाता है तो माउसओवर आग लगती है। बजाए माउसएन्टर और माउसलेव घटनाओं का उपयोग करने का प्रयास करें।

+0

हां, सबसे छोटा समाधान = सर्वोत्तम! यह ऐसा करने का तरीका प्रतीत होता है! आपका बहुत बहुत धन्यवाद! – Winterain

0

तो तुम एक बहुत आसान ताला तंत्र लागू करने के लिए, के रूप में चाहते हो सकता है है:

var fCurrentlyMoving = false;  
$('.gallery_container a').mouseover(function(){ 
    if (!fCurrentlyMoving) { 
     fCurrentlyMoving = true; 
     $(this).children('.title').animate({ 
      opacity: 100, 
      bottom: 0 
     },200, function() { 
      fCurrentlyMoving = false; 
     }); 
    } 
}); 

यह एयरटाइट रेस-कंडीशन-वार नहीं है, लेकिन इसकी आवश्यकता नहीं है।

3

इसे आजमाएं।

$(document).ready(function() { 
$('.gallery_container a').hover(function() { 
    $(this).children('.title').stop().animate({ 
     opacity: 100, 
     bottom: 0 
    }, 200); 
}, function() { 
    $(this).children('.title').stop().animate({ 
     opacity: 0, 
     bottom: -30 
    }, 200); 
}); 
}); 

आप यहां एक लाइव डेमो देख सकते हैं। - http://jsfiddle.net/8Hd7s/

+0

यह भी काम करता है, लेकिन थोड़ी सी झुकाव है जो स्लाइड को पूरे पंक्ति में माउस को घुमाते समय एनिमेटिंग से रोकती है। अच्छा है जब आप हर बार जब आप पास करते हैं तो एनिमेट करना नहीं चाहते हैं ... समाधान के लिए धन्यवाद! – Winterain

+0

आपकी मूल समस्या के आधार पर, मैंने सोचा कि आप यही करने की कोशिश कर रहे थे। आप कार्यों को एनिमेट करने से पहले .stop() को हटाकर इसे आसानी से बदल सकते हैं। –

+0

हाय @ ऑस्टिन ब्रंकहोर्स्ट क्या आप कृपया इस के साथ मदद कर सकते हैं: http://stackoverflow.com/questions/31835128/jquery-onmouseover-selection-attribute/31835344#31835344 –

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