2013-05-16 3 views
2

У меня есть AngularJS анимация ...полные обратный вызов в AngularJS анимации

app.animation('slide-show', function() { 
    return { 
     setup: function (element) { 
     }, 
     start: function (element, done) { 
      element.slideDown(400, done); 
     } 
    }; 
}); 

app.animation('slide-hide', function() { 
    return { 
     setup: function (element) { 
     }, 
     start: function (element, done) { 
      element.slideUp(400, done); 
     } 
    }; 
}); 

Я хотел бы иметь возможность поставить дополнительный «полный» обратный вызов в качестве параметра к start() методам, так что он может быть вызван/передается методам jQuery. Возможно ли это с помощью анимационных директив?

ответ

1

Я только что этот вопрос, и это было, как я добился успеха:

Я имел такую ​​же установку для анимации, но затем я добавил свойство ng-animated на элемент HTML, который я анимировал, затем добавил следующее:

app.animation('slide-show', function() { 
    return { 
     setup: function (element) { 
     }, 
     start: function (element, done) { 
      element.slideDown(400, function(){ 
       var el = angular.element(element[0]); 
       el.scope().$eval(el.attr('ng-animated')); 
       done(); 
      }); 
     } 
    }; 
}); 

app.animation('slide-hide', function() { 
    return { 
     setup: function (element) { 
     }, 
     start: function (element, done) { 
      element.slideUp(400, function(){ 
       var el = angular.element(element[0]); 
       el.scope().$eval(el.attr('ng-animated')); 
       done(); 
      }); 
     } 
    }; 
}); 

Надеюсь, это поможет кому-то еще!

3

Вы уже прошли «полный» обратный вызов (второй параметр - element.slideUp()), однако вы не используете свой собственный, но вы просто вызываете функцию done Угловые.

Вы должны называть эту функцию в конце концов, но ничто не мешает вам выполнять свою работу заранее.

app.animation('slide-hide', function() { 
    return { 
     setup: function (element) { 
     }, 
     start: function (element, done) { 
      element.slideUp(400, function() { 
       // handle the end of the slideUp animation 
       // ... 

       // inform Angular that you're done 
       done(); 
      }); 
     } 
    }; 
}); 

Вы могли бы обобщить это, если вы хотите:

function AnimationCallback(done, callback, callbackArgs) { 
    return function() { 
     if (typeof callback === "function") { 
      // 'this' will be the DOM element that just finished animating 
      callback.apply(this, callbackArgs); 
     } 
     done(); 
    } 
} 

и

app.animation('slide-hide', function() { 
    return { 
     setup: function (element) { 
     }, 
     start: function (element, done) { 
      element.slideUp(400, new AnimationCallback(done, yourCallback)); 
     } 
    }; 
}); 

где yourCallback является любая функция, которую вы определили и callbackArgs необязательный массив аргументов что вы хотели бы перейти к нему.

+0

Спасибо за это, хотя я не думаю, что он решает проблему. Угловой передаёт метод done() для вызова анимации (поэтому я пересылаю его методам jQuery). То, что я хотел бы сделать, - это каким-то образом применить мой обратный вызов к методу start(). Поскольку анимация будет использоваться в качестве директивы (ng-animate = "slide"), ваш глобально определенный обратный вызов не будет повторно использоваться. –

+0

Но вы сказали * «Я хотел бы иметь возможность поставить« полный »обратный вызов *, вы ничего не сказали о' start'? – Tomalak

+0

Извинения за неясность. Я обновил свой вопрос. –

2
app.animation('slide-show', function() { 
    return { 
     setup: function (element) { 
      var complete = function() { 
       /* Your implementation here */ 
      }; 

      return complete; 
     }, 
     start: function (element, done, complete) { 
      element.slideDown(400, done); 

      /* Invoke the function and do something */ 
      complete(); 
     } 
    }; 
}); 

Для получения более подробной информации вы можете хотите проверку этой статьи, а также:

http://gsklee.im/post/50254705713/nganimate-your-angularjs-apps-with-css3-and-jquery#javascript-defined-animations

+0

К сожалению, это решение не может использоваться повторно. Я объявляю, что моя анимация используется во всем мире по всему моему приложению, поэтому я хочу иметь возможность как-то пройти полный обратный вызов. Определение обратного вызова в настройке означает, что оно будет применяться ко всем видам анимации, которые не то, что я ищу. –

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