2015-04-14 5 views
3

У меня есть небольшая проблема с моим Jquery кодексомAnimate 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' не имеют метода' .then() ' – 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() содержат ту же логику и могут быть улучшены.

+0

'$ (document) .ready (AnimateCloud(). Then (AnimateCloud2));' не будет работать по мере необходимости. Лучше обернуть его 'function() {}': [Fiddle] (http://jsfiddle.net/3uL8rbjp/). – Regent

+0

Ты прав, мой плохой. Я думал, ты имеешь в виду добавить анон. function to 'then()' call, я не видел, чтобы 'ready()' отсутствовал, –

+0

В качестве примера я оставлю комментарий со скрипкой. – Regent

1

вы пытаетесь вызвать функцию, то(), но AnimateCloud() возвращают ложь.

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

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

Вы пытаетесь вызвать функцию на AnimateCloud(), которая не является объектом JQuery. Вы можете позвонить AnimateCloud2() изнутри AnimateCloud(), когда он завершает свою анимацию, смотрите ниже код

<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

Причины Методы одушевленные в JQuery не выполнить до предыдущего одушевленного закончили .. вы можете просто использовать

$(document).ready(function(){ 
     AnimateCloud(); 
     AnimateCloud2(); 
}); 
Смежные вопросы