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 相关文章推荐
Javascript 修改String 对象 增加去除空格功能(示例代码)
Nov 30 Javascript
jquery使用jquery.zclip插件复制对象的实例教程
Dec 04 Javascript
window.setInterval()方法的定义和用法及offsetLeft与style.left的区别
Nov 11 Javascript
jQuery中show与hide方法用法示例
Sep 16 Javascript
jQuery实现的右下角广告窗体跟随效果示例
Sep 16 Javascript
js实现页面刷新滚动条位置不变
Nov 27 Javascript
jquery二级目录选中当前页的css样式
Dec 08 Javascript
vue使用axios时关于this的指向问题详解
Dec 22 Javascript
3分钟读懂移动端rem使用方法(推荐)
May 06 Javascript
JavaScript函数式编程(Functional Programming)高阶函数(Higher order functions)用法分析
May 22 Javascript
jquery实现图片无缝滚动 蒙版遮蔽效果
Jan 11 jQuery
vue使用lodop打印控件实现浏览器兼容打印的方法
Feb 07 Vue.js
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中在数据库中保存Checkbox数据(1)
2006/10/09 PHP
PHP CURL获取cookies模拟登录的方法
2013/11/04 PHP
javascript showModalDialog模态对话框使用说明
2009/12/31 Javascript
jQuery 获取URL参数的插件
2010/03/04 Javascript
利用毫秒减值计算时长的js代码
2013/09/22 Javascript
javascript使用prototype完成单继承
2014/12/24 Javascript
JQuery复制DOM节点的方法
2015/06/11 Javascript
Js获取图片原始宽高的实现代码
2016/05/17 Javascript
浅谈js构造函数的方法与原型prototype
2016/07/04 Javascript
jQuery基于ID调用指定iframe页面内的方法
2016/07/06 Javascript
纯JS代码实现隔行变色鼠标移入高亮
2016/11/23 Javascript
JS弹性运动实现方法分析
2016/12/15 Javascript
JS实现双击内容变为可编辑状态
2017/03/03 Javascript
Vue2组件tree实现无限级树形菜单
2017/03/29 Javascript
Node.js实现连接mysql数据库功能示例
2017/09/15 Javascript
手把手教你 CKEDITOR 4 扩展插件制作
2019/06/18 Javascript
vue transition 在子组件中失效的解决
2019/11/12 Javascript
python+mysql实现简单的web程序
2014/09/11 Python
在Docker上部署Python的Flask框架的教程
2015/04/08 Python
Python 爬虫之超链接 url中含有中文出错及解决办法
2017/08/03 Python
python 生成图形验证码的方法示例
2018/11/11 Python
浅谈pycharm的xmx和xms设置方法
2018/12/03 Python
Python图像处理之颜色的定义与使用分析
2019/01/03 Python
python的内存管理和垃圾回收机制详解
2019/05/18 Python
用scikit-learn和pandas学习线性回归的方法
2019/06/21 Python
Python3 全自动更新已安装的模块实现
2020/01/06 Python
pycharm快捷键汇总
2020/02/14 Python
详解Python设计模式之策略模式
2020/06/15 Python
Python实现Word文档转换Markdown的示例
2020/12/22 Python
CSS中几个与换行有关的属性简明总结
2014/04/15 HTML / CSS
HTML5 canvas基本绘图之图形组合
2016/06/27 HTML / CSS
基于HTML5+Webkit实现树叶飘落动画
2017/12/28 HTML / CSS
CK美国官网:Calvin Klein
2016/08/26 全球购物
介绍一下Linux内核的排队自旋锁
2014/01/04 面试题
公务员年度考核登记表个人总结
2015/02/12 职场文书
会计主管岗位职责
2015/04/02 职场文书