2015-04-14 121 views
3

我有一個小問題,我的jQuery代碼動畫jQuery的不工作

Uncaught TypeError: undefined is not a function

<script type="text/javascript"> 
    function AnimateCloud() { 
     $("#cloudAmu").animate({ 
      "left": "+150%" 
     }, 5000, 'linear'); 
     return false; 
    } 

    function AnimateCloud2() { 
     $("#cloudAmu").animate({ 
      "right": "+150%" 
     }, 5000, 'linear'); 
     return false; 
    } 

    $(document).ready(
     AnimateCloud().then(AnimateCloud2()) 
    ); 
</script> 

你有任何想法是什麼問題?

問候

Goldiman

+3

'Boolean'沒有辦法'。那麼()' – Regent

+0

感謝大家,您的幫助! – goldiman

回答

1

的問題是,因爲你的函數返回的false一個布爾值,它不具有then()方法。

要將呼叫鏈接到您的功能,您需要將promise從撥打電話返回animate()。試試這個:

function AnimateCloud() { 
    return $("#cloudAmu").animate({ 
     "left": "+150%" 
    }, 5000, 'linear').promise(); 
} 

function AnimateCloud2() { 
    return $("#cloudAmu").animate({ 
     "right": "+150%" 
    }, 5000, 'linear').promise(); 
} 

$(document).ready(function() { 
    AnimateCloud().then(AnimateCloud2) 
}); 

需要注意的是,似乎都AnimateCloud()AnimateCloud2()包含相同的邏輯,並且可以改進。 jQuery中

+0

'$(document).ready(AnimateCloud()。then(AnimateCloud2));'不會按需要工作。最好用'function(){}'來包裝它:[Fiddle](http://jsfiddle.net/3uL8rbjp/)。 – Regent

+0

你說得對,我的不好。我以爲你的意思是加一個匿名。函數調用'then()'調用,我沒有看到'ready()'丟失了一個, –

+0

我將以小提琴作爲例子發表評論。 – Regent

1

您嘗試調用一個則()函數,但AnimateCloud()返回false。

function AnimateCloud(complete) { 
    $("#cloudAmu").animate({ 
     "left": "+150%" 
    }, 5000, 'linear', complete); 
} 

AnimateCloud(function() { 
    AnimateCloud2() 
}); 
1

您試圖調用功能上AnimateCloud()這不是一個jQuery對象。 您還可以從內部AnimateCloud()AnimateCloud2(),當它完成其動畫,請參見下面的代碼

<script type="text/javascript"> 
    function AnimateCloud() { 
     $("#cloudAmu").animate({ 
      "left": "+150%" 
     }, 5000, 'linear', function(){ 
      AnimateCloud2(); 
     }); 

     return false; 
    } 

    function AnimateCloud2() { 
     $("#cloudAmu").animate({ 
      "right": "+150%" 
     }, 5000, 'linear'); 
     return false; 
    } 

    $(document).ready(function(){ 
     AnimateCloud(); 
    }); 
</script> 
+0

@Regent,我已經更新了我的答案。它應該在完成動畫後調用。 –

+0

還有一件事要做:它必須是'$(document).ready(AnimateCloud);'或'$(document).ready(function(){AnimateCloud();});'[Fiddle](http ://jsfiddle.net/3uL8rbjp/1/)。 – Regent

+0

@Regent,是的,我錯過了。我已更新它,謝謝:) –

1

原因動畫的方法不執行到成品之前的動畫..你可以只使用

$(document).ready(function(){ 
     AnimateCloud(); 
     AnimateCloud2(); 
});