我正在将新的AngularJS 1.2方法(year of moo article)用于使用CSS3过渡的动画。如果浏览器不支持CSS动画,我想有条件地应用后备jQuery动画。


仅使用CSS ng-enter,ng-enter-active等时,我的CSS动画效果良好。
使用app.animations(“ ...”)时,我的jQuery动画工作正常,如下所示
我正在使用Modernizr,因此.no-cssanimations类已经应用于我的html文档。
当IE9之类的浏览器不支持CSS动画时,我想有条件地应用jQuery动画。


现在,我正在尝试通过这样的类选择器“ .no-cssanimations .slideup-form”来完成此操作...

//Simplified angular animation example
app.animation("**.no-cssanimations .slideup-form**", function () {
     return {
          enter: function (element, done) { ... },
          leave: function (element, done) { ... }
          }
});


那不行有没有更好的方法可以做到这一点?

谢谢...

更新:

我无法弄清楚上面的选择器方法-但通过在javascript中测试Modernizr对象,有条件地调用app.animation()使其起作用。我没意识到你可以像这样测试。

if (Modernizr.canvas) { ... }


再次感谢您的帮助。

最佳答案

您不能在animation()工厂方法中使用复杂的选择器。您只能将一个CSS类名称用于一个级别。而是使用$ sniffer来确定您的动画工厂方法是否有条件基于浏览器的功能,方法是使用$ sniffer来检测是否存在过渡。

//you can make this an EMPTY string if you want this animation to apply to ALL
//possible elements...
app.animation('.slideup-form', function($sniffer) {
  if(!$sniffer.transitions) {
    //this object will conditionally be added if the browser doesn't support
    //native CSS3 animations
    return {
      enter             : function(element, done) {},
      leave             : function(element, done) {},
      move              : function(element, done) {},
      beforeAddClass    : function(element, className, done) {},
      addClass          : function(element, className, done) {},
      beforeRemoveClass : function(element, className, done) {},
      removeClass       : function(element, className, done) {}
    }
  }
});


只要记住在您的JS动画代码中调用done()。同时升级到1.2.5。

09-04 10:10
查看更多