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


Posted in Javascript onDecember 31, 2015

AngularJS 是一组用于创建单页Web应用的丰富框架,给构建丰富交互地应用带来了所有需要的功能。其中一项主要的特性就是Angular带来了对动画的支持。

本篇体验在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>

以上内容是小编给大家介绍的AngularJS中实现显示或隐藏动画效果的方式总结,希望大家喜欢。

Javascript 相关文章推荐
Jquery判断IE6等浏览器的代码
Apr 05 Javascript
Javascript继承(上)——对象构建介绍
Nov 08 Javascript
如何阻止复制剪切和粘贴事件为了表单内容的安全
May 23 Javascript
Javascript自定义排序 node运行 实例
Jun 05 Javascript
jquery 滚动条事件简单实例
Jul 12 Javascript
Node.js 的异步 IO 性能探讨
Oct 08 Javascript
js+HTML5实现视频截图的方法
Jun 16 Javascript
辨析JavaScript中的Undefined类型与null类型
May 26 Javascript
解决ztree搜索中多级菜单展示不全问题
Jul 05 Javascript
vue移动端裁剪图片结合插件Cropper的使用实例代码
Jul 10 Javascript
使用JavaScript进行表单校验功能
Aug 01 Javascript
浅谈layui框架自带分页和表格重载的接口解析问题
Sep 11 Javascript
javascript数据类型验证方法
Dec 31 #Javascript
jQuery操作基本控件方法实例分析
Dec 31 #Javascript
javascript图片延迟加载实现方法及思路
Dec 31 #Javascript
jQuery动画显示和隐藏效果实例演示(附demo源码下载)
Dec 31 #Javascript
详解javascript高级定时器
Dec 31 #Javascript
jQuery动画效果相关方法实例分析
Dec 31 #Javascript
js实现文字垂直滚动和鼠标悬停效果
Dec 31 #Javascript
You might like
Php Image Resize图片大小调整的函数代码
2011/01/17 PHP
php echo, print, print_r, sprintf, var_dump, var_expor的使用区别
2013/06/20 PHP
php判断文件上传类型及过滤不安全数据的方法
2014/12/17 PHP
php实现自定义中奖项数和概率的抽奖函数示例
2017/05/26 PHP
解析JavaScript中的标签语句
2013/06/19 Javascript
node.js中的fs.fchown方法使用说明
2014/12/16 Javascript
JavaScript实现三阶幻方算法谜题解答
2014/12/29 Javascript
javascript实现数独解法
2015/03/14 Javascript
详解JavaScript基本类型和引用类型
2015/12/09 Javascript
animate 实现滑动切换效果【实例代码】
2016/05/05 Javascript
Highcharts 多个Y轴动态刷新数据的实现代码
2016/05/28 Javascript
Backbone中View之间传值的学习心得
2016/08/09 Javascript
基于react组件之间的参数传递(详解)
2017/09/05 Javascript
JS正则表达式完美实现身份证校验功能
2017/10/18 Javascript
vue 通过下拉框组件学习vue中的父子通讯
2017/12/19 Javascript
React Native基础入门之调试React Native应用的一小步
2018/07/02 Javascript
详解promise.then,process.nextTick, setTimeout 以及 setImmediate的执行顺序
2018/11/21 Javascript
angular2 NgModel模块的具体使用方法
2019/04/10 Javascript
[41:54]2018DOTA2亚洲邀请赛 4.1 小组赛A组加赛 TNC vs Liquid
2018/04/03 DOTA
python处理图片之PIL模块简单使用方法
2015/05/11 Python
Tesserocr库的正确安装方式
2018/10/19 Python
python覆盖写入,追加写入的实例
2019/06/26 Python
CSS3模拟IOS滑动开关效果
2016/09/28 HTML / CSS
html5 Canvas画图教程(1)—画图的基本常识
2013/01/09 HTML / CSS
html5 viewport使用方法示例详解
2013/12/02 HTML / CSS
浅析border-radius如何兼容IE
2016/04/19 HTML / CSS
世界上最好的精品店:Shoptiques
2018/02/05 全球购物
美国环保妈妈、儿童和婴儿用品购物网站:The Tot
2019/11/24 全球购物
华为慧通笔试题
2016/04/22 面试题
高中班主任评语大全
2014/04/25 职场文书
单方离婚协议书范本2014
2014/10/28 职场文书
通知怎么写?
2019/04/17 职场文书
Python selenium模拟网页点击爬虫交管12123违章数据
2021/05/26 Python
浅谈Python数学建模之数据导入
2021/06/23 Python
java.util.NoSuchElementException原因及两种解决方法
2022/06/28 Java/Android
vue实现input输入模糊查询的三种方式
2022/08/14 Vue.js