Angular 动画 ng-cloak 不透明度

Posted

技术标签:

【中文标题】Angular 动画 ng-cloak 不透明度【英文标题】:Angular animate ng-cloak opacity 【发布时间】:2013-08-01 20:44:57 【问题描述】:

我似乎无法为ng-cloak 设置动画。本质上,我正在尝试为 div from .containter.ng-cloak to .container.ng-binding 制作动画 但它似乎不起作用——Angular 会立即使用 container ng-binding 类加载 div,而忽略 transition 规则。

我什至尝试使用 transition-delay 设置为几秒钟,没有骰子。

html

<div class="container ng-cloak" ng-controller="AppCtrl">

CSS

.container.ng-cloak,
.container.ng-binding 
    opacity: 0;
    transition: opacity 800ms ease-in-out;

.container.ng-binding 
    opacity: 1;

值得注意的是:

background-color 从蓝色转换为红色似乎可以正常工作。 为简洁起见,我省略了供应商前缀。

提前致谢。

【问题讨论】:

【参考方案1】:

另一种方法:

http://jsfiddle.net/coma/UxcxP/2/

HTML

<section ng-app>
    <div ng-class="foo:true"></div>
</section>

CSS

div 
    width: 100px;
    height: 100px;
    background-color: red;
    opacity: 0;
    -moz-transition: opacity 0.5s ease;
    -o-transition: opacity 0.5s ease;
    -webkit-transition: opacity 0.5s ease;
    transition: opacity 0.5s ease;


div.foo 
    opacity: 1;

这将像 cloak 一样工作,因为 Angular 在加载之前不会设置 foo 类。

披风不会像你想要的那样工作,因为它会在那里(作为一个类、属性、元素......),直到 Angular 用它的模板过程的结果替换它,所以它不是同一个节点这就是为什么它不会得到转换(当相同元素发生变化时发生转换),没有变化,只是不是同一个节点。

看看这个:

http://jsfiddle.net/coma/UxcxP/5/

正如您在该示例中看到的那样,被“角化”的 div 旁边的 div 正在获得淡入淡出动画,因为即使在 Angular 发生之前它也是同一个 div。

【讨论】:

这很好用,谢谢,但我更感兴趣的是为什么我的ng-cloak 方法不起作用,而理论上它应该起作用。 我喜欢这个!真的不需要 ngAnimate 或 AngularJS 即可工作:)。您可能可以使用 jquery 的“当窗口完全加载时”侦听器来切换它。 onehungrymind.com/ng-animate-first-look-with-angularjs-wizard 由于 div css,我实际上无法使用 ngAnimate 完成这项工作,这是基于您的替代方案:jsfiddle.net/coma/UxcxP/2 这在 Chrome 中似乎不起作用。将@coma 的 JSFiddle 分叉为 15 秒的持续时间。我看到它在使用 Safari 和 Firefox 时逐渐消失,但在 Chrome 中它直接完全不透明。 jsfiddle.net/7Nnhy @coma 不错,这行得通。由于修复涉及将 ng-app 更改为从 JS 引导,这是否意味着如果您使用 ng-app,此效果在 Chrome 中不起作用?我试过了,好像是这样。【参考方案2】:

我意识到有一个公认的答案;但是,这可以通过最初尝试的 ng-cloak 指令来实现。

我用它来动画 Jade 生成的标记。您的里程可能会因 Angular 运行时模板化标记而异。

http://codepen.io/simshanith/pen/mqCad

HTML

<div class="container ng-cloak fade-ng-cloak" ng-controller="AppCtrl">

CSS

[ng\:cloak],
[ng-cloak],
[data-ng-cloak],
[x-ng-cloak],
.ng-cloak,
.x-ng-cloak 
  display: none !important;

.fade-ng-cloak 
  opacity: 1;
  -ms-filter: none;
  -webkit-filter: none;
          filter: none;
  -webkit-transition: opacity 0.5s;
  transition: opacity 0.5s;

.fade-ng-cloak[ng-cloak] 
  display: block !important;
  opacity: 0;
  -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=0)";
  filter: alpha(opacity=0);

.fade-ng-cloak.ng-cloak,
.fade-ng-cloak.ng-binding 
    opacity: 0;
    transition: opacity 800ms ease-in-out;

.fade-ng-cloak.ng-binding 
    opacity: 1;

【讨论】:

只是一个额外的 CSS 类。太好了。【参考方案3】:

纯 CSS 解决方案,无需在 HTML 中添加额外的类:

HTML

<div ng-cloak>myProperty</div>

CSS

[ng-cloak] 
    display: block !important;
    opacity: 0;


[ng-cloak],
.ng-binding 
    transition: opacity 300ms ease-in-out;


.ng-binding 
    opacity: 1;

【讨论】:

【参考方案4】:

我的解决方案类似于其他一些解决方案,但我的用例要求我在 div 上使用 angular 不绑定的 cloak,所以这就是我最终要做的......

(为简洁起见省略了浏览器前缀)

CSS

[ng\:cloak], [ng-cloak], [data-ng-cloak], [x-ng-cloak], .ng-cloak, .x-ng-cloak
    display: none !important;


.fade-ng-cloak 
    display: block !important;
    opacity: 1;
    transition: opacity 0.5s;


.fade-ng-cloak.ng-cloak 
    opacity: 0;

HTML

<div class="row ng-cloak fade-ng-cloak">
    <div class="col-xs-12">
        <uib-accordion close-others="true">
            ...
        </uib-accordion>
    </div>
</div>

【讨论】:

以上是关于Angular 动画 ng-cloak 不透明度的主要内容,如果未能解决你的问题,请参考以下文章

在 Angular 4 中动画图像交换(在 AngularJS 中是 ng-animate-swap)

AngularJS ng-cloak 不会阻止 Mean.js 中的代码闪烁

在 UITableViews 中设置导航栏半透明以启动动画

透明居然可以透部分背景色过来

jquery .stop()的用法

一个obj格式的透明窗子模型,导入到Unity 3D中,窗子变得不透明了,求大神解答,求原因