当 ng-show 为 false 时,AngularJS 动画不会立即停止

标签 angularjs animation

这是我的登录表单:

<div class="container login">
    <h2 class="header">Login</h2>
    <form class="form-horizontal" role="form" name="loginForm">
        <div class="form-group">
            <label for="inputUsername" class="col-sm-2 control-label">Username</label>
            <div class="col-sm-10">
                <input type="text" class="form-control" id="inputUsername" placeholder="Username" ng-model="data.userName" required>
            </div>
        </div>
        <div class="form-group">
            <label for="inputPassword" class="col-sm-2 control-label">Password</label>
            <div class="col-sm-10">
                <input type="password" class="form-control" id="inputPassword" placeholder="Password" ng-model="data.password" required>
            </div>
        </div>
        <div class="form-group">
            <div class="col-sm-offset-2 col-sm-10">
                <div class="checkbox">
                    <label>
                        <input type="checkbox" ng-model="data.rememberMe"> Remember me
                    </label>
                </div>
            </div>
        </div>
        <div class="form-group">
            <div class="col-sm-offset-2 col-sm-10">
                <a ui-sref="forgotPassword">Forgot your password?</a>
            </div>
        </div>
        <div class="form-group">
            <div class="col-sm-offset-2 col-sm-10">
                <button type="submit" class="btn btn-primary" ng-click="login(loginForm)" ng-disabled="loading">Sign in</button>
                <span class="glyphicon glyphicon-refresh glyphicon-refresh-animate login-refresh" ng-show="loading"></span>
            </div>
        </div>
    </form>
</div>

如您所见,最后一个跨度有一个动画,在发送表单时将触发该动画

这是CSS:

.glyphicon-refresh-animate {
    -animation: spin 1s infinite linear;
    -webkit-animation: spin2 1.5s infinite linear;
}

@-webkit-keyframes spin2 {
    from {
        -webkit-transform: rotate(0deg);
    }

    to {
        -webkit-transform: rotate(360deg);
    }
}

问题是,当我将 $scope.loading 设置回 false 时,它​​只会在完成动画循环后隐藏加载范围。

假设我将动画时间更改为 20 秒,它只会在 0-20 秒之间隐藏加载(取决于上次运行)。

为什么会发生这种情况?

最佳答案

也许使用 ng-if 而不是 ng-show 可以解决这个问题。 ng-show 只是显示和隐藏 DOM 元素,本质上是切换“显示”CSS 属性。也许这还不足以阻止你的动画。另一方面,ng-if 甚至不读取 DOM 元素。它的工作方式就好像该元素不存在于 HTML 中一样。

关于当 ng-show 为 false 时,AngularJS 动画不会立即停止,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30544186/

相关文章:

flutter - 如何在 Flutter 中反转具有不同持续时间的动画

html - 如何多个div淡出淡入循环动画

jquery - 无论如何要在 jQuery 事件上向元素添加 css3 过渡动画

android - 如何在android中移动和动画图像?

javascript - AngularJS 动态注入(inject)范围或 Controller

javascript - 使用 ng-include 和 ng-click 更新数据

javascript - 如何使用 Javascript 和 Angular 显示货币符号

javascript - 如果使用 row.add,ng-click 无法与 AngularJS 和 jquery dataTables 一起使用

angularjs - 获取angularjs中的对象长度未定义

android - <objectAnimator> 和 ValueAnimator aka <animator> 之间的区别?