2014-10-14 3 views
-1

Используя библиотеку под названием Velocity JS для анимации: http://julian.com/research/velocity/Javascript проверка объекта недвижимости, если возвращается истинный

Я использую его следующим образом:

var velocity = new Velocity(element, { 
        translateX: 250, 
        complete: function() { 
         return true; 
        } 
       }, 5); 

То, что я пытаюсь сделать, это проверка, если полный имеет вернул true об успешном завершении анимации, чтобы я мог переключать анимацию.

Каков наилучший метод для проверки, если это правда

if(velocity.complete() === true) 

Это возвращает неопределенное значение.

Любая помощь приветствуется.

+1

Общий принцип обратных вызовов обрабатывается очень хорошо в [Как вернуть ответ от вызова Ajax?] (Http://stackoverflow.com/questions/14220321/how-to-return-the-response-from- a-ajax-call). Вы будете в основном заинтересованы в части «реестре кода» принятого ответа. – apsillers

+0

Im, пытающийся активировать анимацию с помощью другого щелчка, поэтому я решил проверить, завершится ли первая анимация, наилучшим образом – AntonB

+0

Ах, поэтому вы хотите, чтобы функция 'complete' переключила переменную состояния, которая указывает, что программа готова к выполнению обратная анимация? Это действительно немного другая проблема. – apsillers

ответ

1

Если вам нужно сохранить тот факт, что анимация завершена, в для того, чтобы прочитать эту информацию позже на основе взаимодействия с пользователем (например, нажатие кнопки), просто установите переменную во внешней области видимости:

var animationComplete = false; 

var velocity = new Velocity(element, { 
        translateX: 250, 
        complete: function() { 
         animationComplete = true; 
        } 
       }, 5); 

И читать его, когда происходит взаимодействие пользователя:

$("#someButton").on("click", function() { 
    if(animationComplete) { 
     // do something only if the animation has completed 
    } 
}); 

Неважно, где вы храните это значение (как локальную или глобальную переменную, как свойство на объекте и т. Д.), Если оно видимо для функций, которые необходимо прочитать и установить.

Обратите внимание, что возвращаемое значение обратного вызова complete никогда не используется. Объект функции обратного вызова complete передается в конструктор Velocity, и он называется позже изнутри собственного кода velocity.js. Velocity.js, вероятно, не раскрывает (или даже не сохраняет) это возвращаемое значение в любом месте.

+0

Да, это приемлемое решение, спасибо. – AntonB

1

Вы уже передаете полную функцию, но return ing true не очень полезен в этом случае. Начало второй анимации, когда полная функция называется:

var velocity = new Velocity(element, { 
    translateX: 250, 
    complete: function() { 
     // start another animation 
    } 
}, 5); 

Если вам нужно переключать анимации по щелчку или другого событию, вы должны сохранять анимацию булевой вне где-то, даже в элементе йота или с помощью JQuery data метод:

var $velocity = $("#velocity"); 

$velocity.data("animating", false); 
$velocity.data("direction", "left"); 

$velocity.on("click", function() { 

    if ($velocity.data("animating")) { 
     return; 
    } 

    $velocity.data("animating", true); 

    if ($velocity.data("direction") === "left") { 
     var ml = -30; 
     $velocity.data("direction", "right"); 
    } else { 
     var ml = 30; 
     $velocity.data("direction", "left"); 
    } 

    $velocity.velocity({marginLeft:ml},{ 
     duration:500, 
     complete: function() { 
      $velocity.data("animating", false);  
     } 
    }); 
}); 

JSFIDDLE

+0

Im пытается TOGGLE анимации с другим щелчком на той же кнопке, поэтому я подумал, что проверка того, завершит ли первая анимацию, будет лучшим способом – AntonB

+0

@AntonB См. Edit –

Смежные вопросы