2012-02-25 8 views
8

मैं एक निश्चित क्षेत्र के भीतर क्षैतिज रूप से एक div एनिमेट करना चाहता हूं। मेरे पास अभी समस्या यह है कि मैं यह नहीं समझ सकता कि आगे बढ़ने के बाद मेरा div वापस कैसे स्थानांतरित किया जाए।मैं आगे बढ़ने के लिए jquery की एनिमेट विधि का उपयोग कैसे करूं

<script type="text/javascript"> 
    var animatethis = function (targetElement, speed) { 
     $(targetElement).animate(
      { 
       marginLeft: "+=250px" 
      }, 
      { 
       duration: speed, 
       complete: function() { 
        animatethis(this, speed); 
        animatethis.stop(); 
        $(targetElement).animate({ marginLeft: "-=250px" }); 
       } 
      } 
        ) 
    }; 
    animatethis($('#q1'), 5000); 
</script> 
+0

आप इसे लूप करना चाहते हैं, है ना? –

+0

आपको पहले एनीमेशन के बाद कॉलबैक की ज़रूरत है, मेरा जवाब आज़माएं। –

+0

हां, मैं इसे लूप माफ करना चाहता था अगर मैंने यह स्पष्ट नहीं किया – user798774

उत्तर

7

देखो

यहाँ स्क्रिप्ट है कि मैं का उपयोग कर रहा है। animatethis कुछ भी वापस नहीं करता है, जिसका अर्थ है कि लाइन

animatethis.stop(); 

हमेशा दुर्घटना करने जा रहा है (जैसे कुछ "लेखन त्रुटि: कॉल नहीं कर सकता विधि अपरिभाषित के 'स्टॉप'")। आप complete कॉलबैक में एनिमेशन के क्रम को भी मिश्रित कर रहे हैं।

स्टॉप, सांस लें और सोचें कि आपका कोड वास्तव में क्या कर रहा है।


ठीक है, तो बाद marginLeft बढ़ जाती है, तो आप इसे कम करना चाहेंगे। फिर आप सभी को शुरू करना चाहते हैं। सही? तो:

function animatethis(targetElement, speed) { 
    $(targetElement).animate({ marginLeft: "+=250px"}, 
    { 
     duration: speed, 
     complete: function() 
     { 
      targetElement.animate({ marginLeft: "-=250px" }, 
      { 
       duration: speed, 
       complete: function() 
       { 
        animatethis(targetElement, speed); 
       } 
      }); 
     } 
    }); 
}; 

animatethis($('#q1'), 5000); 

इस बिल्ली को त्वचा के कई अन्य तरीके हैं, लेकिन यह काम करता है। http://jsfiddle.net/mattball/rKu6Y/

+0

वाह धन्यवाद जो मुझे चाहिए था और हाँ जब मैं स्टॉप का उपयोग कर रहा था तो यह आउटपुट पैनल – user798774

+0

पर सामान प्रिंट कर रहा था, मुझे आश्चर्य है कि यह एक स्टैक ओवरफ़्लो अपवाद को क्यों ट्रिगर नहीं करता है यह अनिवार्य रूप से एक अनंत रिकर्सन है। – Neolisk

+1

@Neolisk कॉलबैक ढेर में नहीं जोड़ते हैं - उन्हें बाद में बुलाया जाता है। –

0

उपयोग jQuery queue() विधि श्रृंखला घटनाओं के लिए: http://api.jquery.com/queue/ आपके ब्राउज़र कंसोल में

+0

मेह। अनुपयोगी। -1 –

+0

आप पर लेटर यह मूल्यवान होगा :) – yoda

7

क्या आप ऐसा करने की कोशिश कर रहे हैं? http://jsfiddle.net/vwH6R/2/

setInterval(function(){ 
    $("div").stop(true,true).animate({left: 300}, 1000, 
      function(){ $(this).stop(true,true).animate({left: 0}, 1000); 
    }); 
}, 2000);​ 
+1

यह एक सबसे अच्छा है। – aleXela

3

प्रयास करें this बेला

एचटीएमएल

<div class="myDiv">A Div</div>​ 

जे एस

$('.myDiv').animate({ 
    'margin-left':'50px' 
}, 500, function(e){ 
$('.myDiv').animate({ 
    'margin-left':'0px' 
}, 500)});​ 
+0

मुझे लगता है कि ओपी एनीमेशन लूप चाहता था। शायद मैं गलत हूँ। –

+0

धन्यवाद लेकिन मैंने सोचा कि वह सिर्फ यह आगे बढ़ना चाहता था और इसे फिर से वापस लेना चाहता था। –

1

आप इसे एक n के लिए वापस और आगे ले जाने के लिए जा रहे हैं कई बार, आप इसे एक फ़ंक्शन में लपेट सकते हैं, जो स्वयं को कॉल करता है। कुछ ऐसा:

function wobble(selector, amount, times, intSpeed) { 

    var string = String($(selector).css("marginLeft")).replace("px", ""), 
    leftMargin = parseInt(string, 10); 

    $(selector).animate({ marginLeft: (leftMargin + amount) + 'px' }, intSpeed, function() { 
     if (times > 0) { 
      wobble(selector, -amount, --times, intSpeed); 
     } else { 
      $(selector).css("marginLeft", leftMargin + 'px'); 
     } 
    }); 
} 
संबंधित मुद्दे