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遍历input取得input的name
Apr 27 Javascript
Jquery AJAX 框架的使用方法
Nov 03 Javascript
统计jQuery中各字符串出现次数的工具
May 03 Javascript
jQuery链使用指南
Jan 20 Javascript
详谈Node.js之操作文件系统
Aug 29 Javascript
20170918 前端开发周报之JS前端开发必看
Sep 18 Javascript
小程序日历控件使用方法详解
Dec 29 Javascript
vue双向绑定及观察者模式详解
Mar 19 Javascript
微信小程序如何修改本地缓存key中单个数据的详解
Apr 26 Javascript
JavaScript:ES2019 的新特性(译)
Aug 08 Javascript
Vue替代marquee标签超出宽度文字横向滚动效果
Dec 09 Javascript
Vue通过provide inject实现组件通信
Sep 03 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作的文本留言本的例子(三)
2006/10/09 PHP
20个2014年最优秀的PHP框架回顾
2014/10/22 PHP
php数组生成html下拉列表的方法
2015/07/20 PHP
Joomla开启SEF的方法
2016/05/04 PHP
PHP实现统计在线人数功能示例
2016/10/15 PHP
javascript 学习之旅 (3)
2009/02/05 Javascript
ECMAScript6中Set/WeakSet详解
2015/06/12 Javascript
jQuery编程中的一些核心方法简介
2015/08/14 Javascript
js和jQuery设置Opacity半透明 兼容IE6
2016/05/24 Javascript
jquery通过name属性取值的简单实现方法
2016/06/20 Javascript
判断输入的字符串是否是日期格式的简单方法
2016/07/11 Javascript
jQuery中select与datalist制作下拉菜单时的区别浅析
2016/12/30 Javascript
JS+canvas画一个圆锥实例代码
2017/12/13 Javascript
使用vue-infinite-scroll实现无限滚动效果
2018/06/22 Javascript
jQuery实现导航样式布局操作示例【可自定义样式布局】
2018/07/24 jQuery
Vuex的API文档说明详解
2020/02/05 Javascript
js模拟实现百度搜索
2020/06/28 Javascript
PyQt5图形界面播放音乐的实例
2019/06/17 Python
微信小程序python用户认证的实现
2019/07/29 Python
用Python徒手撸一个股票回测框架搭建【推荐】
2019/08/05 Python
python装饰器相当于函数的调用方式
2019/12/27 Python
python在不同条件下的输入与输出
2020/02/13 Python
python生成任意频率正弦波方式
2020/02/25 Python
python实现横向拼接图片
2020/03/23 Python
Python tkinter实现简单加法计算器代码实例
2020/05/13 Python
Django前后端分离csrf token获取方式
2020/12/25 Python
Hunkemöller瑞士网上商店:欧洲最大的内衣品牌之一
2018/12/03 全球购物
Farfetch阿联酋:奢侈品牌时尚购物平台
2019/07/26 全球购物
DataList 能否分页,请问如何实现?
2015/05/03 面试题
商务英语本科生的自我评价分享
2013/11/15 职场文书
迎新晚会策划方案
2014/06/13 职场文书
党员个人查摆剖析材料
2014/10/16 职场文书
铁路安全反思材料
2014/12/24 职场文书
大学生社会实践活动总结报告
2015/05/06 职场文书
java如何实现socket连接方法封装
2021/09/25 Java/Android
浅谈css清除浮动(clearfix和clear)的用法
2023/05/21 HTML / CSS