2010-01-11 15 views
6

मैं एक एनीमेशन चलाने के लिए केवल एक एनीमेशन चलाने की कोशिश कर रहा हूं जब माउस किसी ऑब्जेक्ट पर हो। मैं एनीमेशन का एक पुनरावृत्ति प्राप्त कर सकता हूं और फिर इसे माउस पर सामान्य पर वापस सेट कर सकता हूं। लेकिन मैं एनीमेशन को माउसओवर पर लूप करना चाहता हूं। SetInterval का उपयोग करके, मैं इसे कैसे करूँगा? मैं थोड़ा फंस गया हूँ।माउसओवर पर jquery निरंतर एनीमेशन

उत्तर

9

यह इस तरह किया जा सकता है:

$.fn.loopingAnimation = function(props, dur, eas) 
{ 
    if (this.data('loop') == true) 
    { 
     this.animate(props, dur, eas, function() { 
      if($(this).data('loop') == true) $(this).loopingAnimation(props, dur, eas); 
     }); 
    } 

    return this; // Don't break the chain 
} 

अब, आप ऐसा कर सकते हैं:

$("div.animate").hover(function(){ 
    $(this).data('loop', true).stop().loopingAnimation({ left: "+10px"}, 300); 
}, function(){ 
    $(this).data('loop', false); 
    // Now our animation will stop after fully completing its last cycle 
}); 

यदि आप एनीमेशन चाहता था तुरंत रोक, आप hoverOut लाइन को बदल सकता है पढ़ने के लिए :

$(this).data('loop', false).stop(); 
+0

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

+0

डौग, * एनिमेट * कॉल बंद करने वाले कोष्ठक गायब था इसलिए मैंने इसे जोड़ा लेकिन यह बचाने के लिए पर्याप्त नहीं था क्योंकि आपको कम से कम 6 वर्ण संशोधनों की आवश्यकता है, इसलिए मैंने उस उद्देश्य के लिए अपना कोड इंडेंट किया। FYI करें। –

4

setInterval टाइमर को अक्षम करने के लिए clearInterval पर एक आईडी लौटा दी जा सकती है।

आप लिख सकते हैं निम्नलिखित:

var timerId; 

$(something).hover(
    function() { 
     timerId = setInterval(function() { ... }, 100); 
    }, 
    function() { clearInterval(timerId); } 
); 
1

पर विचार करें:

साथ
<div id="anim">This is a test</div> 

:

#anim { padding: 15px; background: yellow; } 

और:

var over = false; 
$(function() { 
    $("#anim").hover(function() { 
    over = true; 
    grow_anim(); 
    }, function() { 
    over = false; 
    }); 
}); 

function grow_anim() { 
    if (over) { 
    $("#anim").animate({paddingLeft: "100px"}, 1000, shrink_anim); 
    } 
} 

function shrink_anim() { 
    $("#anim").animate({paddingLeft: "15px"}, 1000, grow_anim); 
} 

आप इसे टाइमर का उपयोग करके भी प्राप्त कर सकते हैं।

+0

कूल समाधान। मैं अभी भी जेएस में एक नौसिखिया हूँ। मैं यह सामान्य कैसे बनाऊंगा ताकि अगर मेरे पास कई एनीज़ हों, तो मुझे लगता है कि मैं फ़ंक्शन में आईडी में पास करूंगा और फिर प्रत्येक बार प्रत्येक बार इसे कॉल करूंगा? क्या फ़ंक्शन() भाग वहां पैरामीटर ले सकता है, और hwo मैं इसे प्रत्येक प्रकार के लिए कॉल करूंगा, क्या वास्तव में यह सबसे अच्छा समाधान है? –

4

मैं पृष्ठ पर एक से अधिक वस्तु के लिए काम करने के लिए यह आवश्यक तो मैं एक छोटे से कि्लिटस के कोड को संशोधित: समस्याओं wtih प्रत्यावर्तन के कारण

var over = false; 
$(function() { 
    $("#hovered-item").hover(function() { 
    $(this).css("position", "relative"); 
    over = true; 
    swinger = this; 
    grow_anim(); 
    }, function() { 
    over = false; 
    }); 
}); 

function grow_anim() { 
    if (over) { 
    $(swinger).animate({left: "5px"}, 200, 'linear', shrink_anim); 
    } 
} 

function shrink_anim() { 
    $(swinger).animate({left: "0"}, 200, 'linear', grow_anim); 
} 
संबंधित मुद्दे