AngularJS中实现显示或隐藏动画效果的3种方式

本篇体验在AngularJS中实现在"显示/隐藏"这2种状态切换间添加动画效果。

通过CSS方式实现显示/隐藏动画效果

思路:

→npm install angular-animage
→依赖:var app = angular.module("app",["ngAnimate"]);
→controller中一个变量接收bool值
→界面中提供一个按钮,点击改变bool值
→界面中显示/隐藏的区域提供ng-if和controller中的bool值绑定

app.js

var app = angular.module("app",["ngAnimate"]);

app.controller("AppCtrl", function(){
    this.toggle = true;
})

index.html

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <title></title>
  <link rel="stylesheet" href="../node_modules/bootstrap/dist/css/bootstrap.min.css"/>
  <link rel="stylesheet" href="styles.css"/>
</head>
<body ng-app="app" ng-controller="AppCtrl as app">

<button class="btn" ng-click="app.toggle=!app.toggle">Toggle Animation</button>

<div class="toggle" ng-if="app.toggle">Some content here</div>

<script src="../node_modules/angular/angular.min.js"></script>
<script src="../node_modules/angular-animate/angular-animate.min.js"></script>
<script src="app.js"></script>
</body>
</html>

styes.css

.toggle{
  -webkit-transition: linear 1s;
  -moz-transition: linear 1s;
  -ms-transition: linear 1s;
  -o-transition: linear 1s;
  transition: linear 1s;
}

.toggle.ng-enter{
  opacity: 0;
}

.toggle.ng-enter-active{
  opacity: 1;
}

.toggle.ng-leave{
  opacity: 1;
}

.toggle.ng-leave-active{
  opacity: 0;
}

通过animation方法实现显示/隐藏动画效果

app.animation("某个类名", function(){
    return {
        leave: function(element, done){

        },
        enter: function(element, done){

        }
    }
})

animation可以在某个类名上加上leave,enter事件,leave和enter函数内部如何实现动画效果呢?可以通过TweenMax.min.js实现。

app1.js

ar app = angular.module("app",["ngAnimate"]);

app.controller("AppCtrl", function(){
    this.toggle = true;
})

app.animation(".toggle", function(){
    return {
        leave: function(element, done){
            //element.text("nooooo");
            TweenMax.to(element, 1, {opacity:0, onComplete:done})
        },
        enter: function(element, done){
            TweenMax.from(element, 1, {opacity:0, onComplete:done})
        }
    }
})

index1.html

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <title></title>
  <link rel="stylesheet" href="../node_modules/topcoat/css/topcoat-desktop-light.min.css"/>
</head>
<body class="well-lg" ng-app="app" ng-controller="AppCtrl as app">

<button class="topcoat-button--large--cta" ng-click="app.toggle = !app.toggle">点我</button>

<hr/>

<div class="topcoat-notification toggle" ng-if="app.toggle">I‘m too your to fade</div>

<script type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/gsap/1.18.0/TweenMax.min.js"></script>
<script src="../node_modules/angular/angular.min.js"></script>
<script src="../node_modules/angular-animate/angular-animate.min.js"></script>
<script src="app1.js"></script>
</body>
</html>

其中,npm install topcoat是一个很好的样式库。

使用direcive的方式实现显示/隐藏动画效果

是否可以在显示/隐藏的div部分加上一个属性,比如hide-me="app.isHidden",hide-me这个属性监控app.isHidden,根据值的变化情况再来决定是否显示。

app3.js

var app=angular.module(‘app‘,["ngAnimate"]);

app.controller("AppCtrl", function(){

    this.isHidden = false;

    this.fadeIt = function(){
        //TweenMax.to($("#my-badge"), 1, {opacity:0})
        this.isHidden = !this.isHidden;
    }
})

app.directive("hideMe", function($animate){
    return function(scope, element, attrs){
        scope.$watch(attrs.hideMe, function(newVal){
            if(newVal){
                //TweenMax.to(element, 1, {opacity:0});
                $animate.addClass(element, "fade");
            } else{
                $animate.removeClass(element, "fade");
            }
        })
    }
})

app.animation(".fade", function(){
    return {
        addClass: function(element, className){
            TweenMax.to(element, 1, {opacity:0});
        },
        removeClass: function(element, className){
            TweenMax.to(element, 1, {opacity:1});
        }
    }
})

index3.html

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <title></title>
  <link rel="stylesheet" href="../node_modules/bootstrap/dist/css/bootstrap.min.css"/>
</head>
<body ng-app="app" ng-controller="AppCtrl as app">

<button id="my-button" class="btn-primary" ng-click="app.fadeIt()">Click to fade</button>
<div id="my-badge" class="badge" hide-me="app.isHidden">Fade me</div>

<script src="../node_modules/jquery/dist/jquery.min.js"></script>
<script type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/gsap/1.18.0/TweenMax.min.js"></script>
<script src="../node_modules/angular/angular.min.js"></script>
<script src="../node_modules/angular-animate/angular-animate.min.js"></script>
<script src="app3.js"></script>
</body>
</html>
时间: 2024-10-10 05:33:52

AngularJS中实现显示或隐藏动画效果的3种方式的相关文章

android view控件的显示和隐藏动画效果

// 显示动画 mShowAction = new TranslateAnimation(Animation.RELATIVE_TO_SELF, 0.0f, Animation.RELATIVE_TO_SELF, 0.0f, Animation.RELATIVE_TO_SELF, -1.0f, Animation.RELATIVE_TO_SELF, -0.0f); mShowAction.setRepeatMode(Animation.REVERSE); mShowAction.setDurat

Vue--过渡动画实现的三种方式

一.使用vue的transition标签结合css样式完成动画 1 <!DOCTYPE html> 2 <html lang="en"> 3 <head> 4 <meta charset="UTF-8"> 5 <meta name="viewport" content="width=device-width, initial-scale=1.0"> 6 <met

setAnimationStyle实现的popwindow显示消失的动画效果

摘要 popwindow通过setAnimationStyle(int animationStyle)函数来设置动画效果 android:windowEnterAnimation表示进入窗口动画 android:windowExitAnimation表示窗口退出动画 在res/values/style.xml代码: ?xml version="1.0" encoding="utf-8"? resources style popwindow通过setAnimation

WPF如何去掉ContextMenu的显示和隐藏动画

原文:WPF如何去掉ContextMenu的显示和隐藏动画 首先上一个例子: <Grid Name="grid" Margin="5"> <ListBox> <ListBoxItem Content="asdasd"/> <ListBoxItem Content="asdasd"/> <ListBoxItem Content="asdasd"/>

Acitivity进入退出动画效果的两种实现

以前做项目的时候一直没有注意过activity切换动画的问题,一方面因为没有人要求,一方面因为自己还没能静下心来好好学习.现在把这个问题弄清楚了,拿出来分享下.自己也做个总结. 我这里说的两种实现一种是通过调用overridePendingTransition方式指定将要打开的activity的动画和当前activity的退出动画:另一种是我昨天在做dialog进入退出时提出的想法,通过style来指定某个activity的进入退出的动画效果. 先说第一种实现方式: overridePendin

ps | grep app 命令不显示grep app本身进程的几种方式

ps | grep app 命令不显示grep app本身进程的几种方式 使用ps命令查询进程,常常我们不想打印出"ps | grep app"这个当前进程,比如如下: [root@localhost root]# ps -ef | grep java root     20070 20049  0 Nov19 ?        00:24:33 /usr/java/jdk1.6.0_07/bin/java -Dprogram.name=run.sh -server -Xms512m 

js中 json对象与json字符串相互转换的几种方式

以下总结js中 json对象与json字符串相互转换的几种方式: 一.JSON对象转化为JSON字符串 1.使用JSON.stringify()方法进行转换 该方法不支持较老版本的IE浏览器,比如:ie8(兼容模式).ie7.ie6. var jsonStr = JSON.stringify(jsonObj); alert(jsonStr); var jsonStr = jsonObj.toJSONString(); alert(jsonStr); 二.JSON字符串转化为JSON对象 1.使用

Web开发中的显示与隐藏

大多数编程语言,在平开发过程中,都是会遇到一些特殊的场景,需要实现显示或者隐藏来达到我们想要的效果:然而实现的方式有多种,今天就写一下,希望可以帮到各位. 小编我学习前端1年了,特意写写博客来回顾一下. 方式1: CSS的方式实现 1:设置样式:visibility: hidden/visible;隐藏和显示, 2:设置样式:display:none/(inline/block)隐藏和(内联元素显示/块级元素显示), 两者之间的区别:'visibility 隐藏之后会占布局空间,而display

[转]ionic或者angularjs中图片显示压缩问题解决 or 显示较大图片的某一块区域、裁剪显示

我们知道在html中显示图片一般都是用img控件标签,当然调整大小的也很容易. 但是会出现,特定的img大小,显示一张比较大尺寸的且长宽比例与特定img大小不相符的图片.而导致压缩问题,图片挤压的很严重,看起来很不舒服. 这时候可以用css中background-image这个属性来解决.用div标签代替img标签,然后设置div的背景图片. 因为background-image有很多个属性可以配套使用,所以一般很容易满足需求,比如background-size.background-posit