首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Angular JS:暂时禁用指令提供的动画,这样页面加载时就不会动画了?

Angular JS:暂时禁用指令提供的动画,这样页面加载时就不会动画了?
EN

Stack Overflow用户
提问于 2013-02-22 11:16:22
回答 4查看 2K关注 0票数 2

作为标题,请参阅此小提琴:

http://jsfiddle.net/goodwill/ezNuj/

我用下面的代码添加了一个指令:

代码语言:javascript
复制
myApp.directive('ngFadeIn', function() {
  return function(scope, element, attr) {
    if (element.is('tr, tbody')) {
      element.find('td').effect("highlight", {}, 500);
    } else {
      element.effect("highlight", {}, 500);
    }
    return scope.destroy = function(complete) {
      return element.fadeOut(500, function() {
        if (complete) {
          return complete.apply(scope);
        }
      });
    };
  };
});

我遇到的问题是,当第一次加载页面时,因为我在ng-repeat元素中应用了指令,所以当页面第一次加载时,所有的项都会高亮显示(闪烁一次)。我怎样才能跳过这个效果而没有太多的hack (理想情况下,在指令中做的所有事情)

EN

回答 4

Stack Overflow用户

发布于 2013-02-22 16:04:03

有趣的是,我不确定是否有一个简单,干净的解决方案。ngRepeatDirective似乎并不关心中继器是第一次运行,还是只是在列表中添加新项。因此,它不会让您根据这一点采取不同的操作。AngularUI的ui-animate指令似乎也没有解决这个问题,所以我不确定如果不求助于讨厌的超时,现在是否可行。

您可以做的是修改ngRepeatDirective以检查类似ng-repeat-finished属性的内容,并在中继器完成后执行该属性。然后,添加逻辑以避免在第一个中继器上出现动画应该是微不足道的。

顺便说一句,你不应该用ng前缀来命名你的指令,因为这是Angular内部使用的。您应该为您的应用程序提供自己的前缀。

票数 0
EN

Stack Overflow用户

发布于 2013-02-24 12:20:14

如果我们可以确定页面第一次完成呈现的时间,那么我们可以在服务或rootScope上设置一些属性,您的指令可以注入这些属性,因此可以检查该属性以确定是否应用动画。

不幸的是,似乎没有一种方法来确定页面何时完成呈现。请参阅AngularJS - How to query the DOM when directive rendering is complete,它解决了同样的问题。

我能想到的唯一解决办法是创建另一个指令(在页面上使用一次),该指令将使用$timeout来简单地延迟1秒左右,然后执行我上面提到的操作:在服务或rootScope上设置一些属性。您的fadeIn指令将$watch该属性/变量,并且当值发生变化时,它可以设置一些允许或阻止动画的本地属性/布尔/标志。

票数 0
EN

Stack Overflow用户

发布于 2013-04-13 23:10:07

我会看看angular刚刚在version 1.1.14中发布的内置动画。这是关于新特性的一篇很棒的文章:Animation in AngularJS。特别是,我会查看“有条件地启用/禁用动画”部分。在他们的网站上:

JS:

代码语言:javascript
复制
//turn on the animation
$scope.myAnimation = { enter: 'cool-enter', leave: 'cool-leave' };

//change the animation
$scope.myAnimation = { enter: 'uncool-enter', leave: 'uncool-leave' };

//remove the animation
$scope.myAnimation = null;

HTML:

代码语言:javascript
复制
<div data-some-directive data-ng-animate="myAnimation"></div>

再次注意,这需要当前不稳定版本的angular js 1.1.14

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15016233

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档