我们假设我们有一个单页面的程序,并且想为这个页面添加动画效果。点击某一个链接会将一个试图滑出,同时将另一个试图滑入。

我们将会使用:

  • 使用 ngRoute 来为我们的页面路由

  • 使用 ngAnimate 来为页面创建动画效果

  • 对页面使用 CSS Animations

  • 当我们离开或进入试图时,我们的每一个页面会有不同的动画效果

让我们看一下ngAnimate是如何工作的。ngAnimate 会根据是进入还是离开视图来为不同的Angular 指令(directive)添加和移除不同的CSS类名。例如,当我们加载网站时,无论ng-view中填充了什么都会得到一个.ng-enter的类名。

我们所需要做的就是给.ng-enter 类名添加CSS动画效果,该动画在进入的时候会自动生效。

ngAnimate 可以应用于: ngRepeat, ngInclude, ngIf, ngSwitch, ngShow, ngHide, ngView 以及 ngClass

需要的文件列表:

- index.html
- style.css
- app.js
- page-home.html
- page-about.html
- page-contact.html

index.html,
加载我们需要的资源,定义我们的Angular app,并且为我们注入的视图添加ng-view类名。
<html>
<head><!-- CSS --><!-- load bootstrap (bootswatch version) --><link rel="stylesheet" href="//netdna.bootstrapcdn.com/bootswatch/3.1.1/readable/bootstrap.min.css"><link rel="stylesheet" href="style.css"><!-- JS --><!-- load angular, ngRoute, ngAnimate --><script type="text/javascript" src="http://apps.bdimg.com/libs/angular.js/1.2.13/angular.min.js"></script><script src="http://lib.baomitu.com/angular.js/1.2.13/angular-route.min.js"></script><script src="http://lib.baomitu.com/angular.js/1.2.13/angular-animate.min.js"></script><script src="app.js"></script></head><!-- apply our angular app -->
<body ng-app="animateApp"><!-- inject our views using ng-view --><!-- each angular controller applies a different class here --><div class="page {{ pageClass }}" ng-view></div></body>
</html>

app.js

现在,我们需要将会创建一个带路由的Angular程序,以便我们可以在不刷新页面的情况下修改我们的页面。

// define our application and pull in ngRoute and ngAnimate
var animateApp = angular.module('animateApp', ['ngRoute', 'ngAnimate']);// ROUTING ===============================================
// set our routing for this application
// each route will pull in a different controller
animateApp.config(function($routeProvider) {$routeProvider// home page.when('/', {templateUrl: 'page-home.html',controller: 'mainController'})// about page.when('/about', {templateUrl: 'page-about.html',controller: 'aboutController'})// contact page.when('/contact', {templateUrl: 'page-contact.html',controller: 'contactController'});});// CONTROLLERS ============================================
// home page controller
animateApp.controller('mainController', function($scope) {$scope.pageClass = 'page-home';
});// about page controller
animateApp.controller('aboutController', function($scope) {$scope.pageClass = 'page-about';
});// contact page controller
animateApp.controller('contactController', function($scope) {$scope.pageClass = 'page-contact';
});

page-home.html

<!-- page-home.html -->
<h1>Angular Animations Shenanigans</h1>
<h2>Home</h2><a href="#about" class="btn btn-success btn-lg">About</a>
<a href="#contact" class="btn btn-danger btn-lg">Contact</a>

page-about.html

<!-- page-about.html -->
<h1>Animating Pages Is Fun</h1>
<h2>About</h2><a href="#" class="btn btn-primary btn-lg">Home</a>
<a href="#contact" class="btn btn-danger btn-lg">Contact</a>

page-contact.html

<!-- page-contact.html -->
<h1>Tons of Animations</h1>
<h2>Contact</h2><a href="#" class="btn btn-primary btn-lg">Home</a>
<a href="#about" class="btn btn-success btn-lg">About</a>

style.css

/* make our pages be full width and full height *//* positioned absolutely so that the pages can overlap each other as they enter and leave */.page {bottom: 0;padding-top: 200px;position: absolute;text-align: center;top: 0;width: 100%;
}.page h1 {font-size: 60px;
}.page a {margin-top: 50px;
}/* PAGES (specific colors for each page)
============================================================================= */.page-home {background: #00D0BC;color: #00907c;
}.page-about {background: #E59400;color: #a55400;
}.page-contact {background: #ffa6bb;color: #9e0000;
}/* ANIMATIONS
============================================================================= */.ng-enter {animation: scaleUp 0.5s both ease-in;z-index: 8888;
}.ng-leave {animation: slideOutLeft 0.5s both ease-in;z-index: 9999;
}.ng-enter {z-index: 8888;
}.ng-leave {z-index: 9999;
}/* page specific animations ------------------------ *//* home -------------------------- */.page-home.ng-enter {animation: scaleUp 0.5s both ease-in;
}.page-home.ng-leave {transform-origin: 0% 0%;animation: rotateFall 1s both ease-in;
}/* about ------------------------ */.page-about.ng-enter {animation: slideInRight 0.5s both ease-in;
}.page-about.ng-leave {animation: slideOutLeft 0.5s both ease-in;
}/* contact ---------------------- */.page-contact.ng-leave {transform-origin: 50% 50%;animation: rotateOutNewspaper .5s both ease-in;
}.page-contact.ng-enter {animation: slideInUp 0.5s both ease-in;
}/* leaving animations ----------------------------------------- *//* rotate and fall */@keyframes rotateFall {0% {transform: rotateZ(0deg);}20% {transform: rotateZ(10deg);animation-timing-function: ease-out;}40% {transform: rotateZ(17deg);}60% {transform: rotateZ(16deg);}100% {transform: translateY(100%) rotateZ(17deg);}
}/* slide in from the bottom */@keyframes slideOutLeft {to {transform: translateX(-100%);}
}/* rotate out newspaper */@keyframes rotateOutNewspaper {to {transform: translateZ(-3000px) rotateZ(360deg);opacity: 0;}
}/* entering animations --------------------------------------- *//* scale up */@keyframes scaleUp {from {opacity: 0.3;-webkit-transform: scale(0.8);}
}/* slide in from the right */@keyframes slideInRight {from {transform: translateX(100%);}to {transform: translateX(0);}
}/* slide in from the bottom */@keyframes slideInUp {from {transform: translateY(100%);}to {transform: translateY(0);}
}

我们将使用CSS来添加所有的动画效果。这种方法很棒,因为我们所要做的事就是添加ngAnimate,并且不用修改我们的代码就可以添加CSS动画效果。

ngAnimate为我们的ng-view添加的两个类分别是.ng-enter和.ng-leave。你可以想象一些他们各自的作用。

我们定义了6个不同的动画效果。每一个页面都会有他们各自的ng-enter 和 ng-leave 的动画效果。

转载于:https://www.cnblogs.com/xf110/p/6747211.html

用ng-view创建单页APP相关推荐

  1. razor页面跳转_如何在Blazor中使用Razor页面创建单页应用程序

    razor页面跳转 In this article, we are going to create a Single Page Application (SPA) using Razor pages ...

  2. 七天学会ASP.NET MVC(七)——创建单页应用

    目录 引言 最后一篇学什么 实验32-整理项目组织结构 关于实验32 实验33--创建单页应用--第一部分-安装 什么是Areas? 关于实验33 实验34--创建单页应用--第二部分-显示Emplo ...

  3. 使用vite创建单页应用

    使用vite创建单页应用 学习路径 vite介绍 创建 vite 的项目 梳理项目的结构 vite 项目的运行流程 vite介绍 ·vite·是vue 官方提供另外一种快速创建工程化的 SPA 项目的 ...

  4. Excel数据透视表经典教程八《创建单页/自定义字段透视表》

    前言: 一.单页字段透视表:当对多个表格进行数据透视分析时,不能直接点击插入数据透视表操作.因此,需要创建单页或者自定义字段透视表. 二.自定义字段透视表:由于上述创建的单页字段透视表,对于不同的表格 ...

  5. 揭秘喜马拉雅黑科技——网页播放器(创建自己的单页应用)

    某天上班,偶然打开网页版的喜马拉雅,随手点了首推荐音频...于是伴随着动词大词,动词大词,继续逛着它的首页. 一个不小心,又点进了老郭的相声,哎,还是木有更新,不过老段子也可以再听听,正当老夫要点播的 ...

  6. 如何在Joomla中创建一个漂亮的单页网站

    我们都知道一个好的网站对于建立企业信誉的重要性.但是,在拥有统一的单页网站和多页网站的选项之间进行选择可能会很棘手.特别是如果您是 Joomla 和 Web 开发的新手. 随着移动和社交媒体用户的增加 ...

  7. 带有Upida/Jeneva的ASP.NET MVC单页应用程序(前端/AngularJS)

    目录 介绍 背景 基本结构 JS控制器 HTML视图 查看容器 结论 参考 下载源3.4 MB 在Codeplex上下载最新版本和更多示例 参见工作示例 介绍 在上一篇文章中,我演示了如何使用WebA ...

  8. 即时低码数据库Web应用-ASP.NET Core 3.1单页应用(SPA)

    目录 介绍 网格记录在编辑/添加上的持久性 用于创建单页应用程序(SPA)的步骤 在SQL Server Management Studio中创建数据库 打开Visual Studio Communi ...

  9. 带有Upida/Jeneva.Net的ASP.NET MVC单页应用程序(后端)

    目录 介绍 问题 问题1 问题2 问题3 解决方案 问题1--智能序列化 问题2--反向引用 问题3--映射更新 说明 下载源3.4 MB 在Codeplex上下载最新版本 参见工作示例 介绍 让我们 ...

最新文章

  1. 澎思科技获IDG资本数千万元Pre-A轮融资  推出AI安防全场景软硬件解决方案
  2. 计算机图形学画圆vc代码,计算机图形学实验--完整版-带结果--vc++实现.doc
  3. UITableView的cell向左滑出有删除,修改等选项
  4. python和C语言互相调用的几种方式
  5. C#连接Sqlite 出现:混合模式程序集是针对“v2.0.50727”版的运行时生成的,在没有配置其他信息的情况下,无法在 4.0 运行时中加载该程序集。的解决方案...
  6. 获取另一个驱动的设备结构体_字符设备驱动的另一种写法
  7. 服务器端系统饼图,服务器 操作系统 饼图
  8. php常用数组,php常用数组函数
  9. Chromeedge好用扩展插件分享
  10. python连接数据库实现登录注册_python实现非数据库模式的用户注册和登录
  11. 区块链之imToken上架资产详解
  12. 产品分析报告—Soul
  13. 体验过智慧家居后,我再也不想回家了……
  14. 数据挖掘实战(4)——聚类(Kmeans、MiniBatchKmeans、DBSCAN、AgglomerativeClustering、MeanShift)
  15. 表必备三字段:id, gmt_create, gmt_modified
  16. php取am+pm时间格式,php – 如何将带有日期和时间AM / PM的字符串转换为24小时的mysql时间戳格式...
  17. HM5080E带平衡功能、5V USB输入8.4V/1.5A两节锂电池充电芯片
  18. 用OCLint给iOS代码做静态分析
  19. 2023华为od机试真题B卷【跳格子2】Java 实现
  20. 彩票摇奖 java_Java课程设计——彩票购买抽奖系统

热门文章

  1. CSDN《老友记》简记
  2. 最简单的基于FFMPEG的音频编码器(PCM编码为AAC)
  3. jQuery 学习-样式篇(八):jQuery 设置元素的 CSS 样式
  4. layUI使用table.reload时出现了两次请求问题
  5. 路由器Lan、Wan短接问题
  6. java获取服务器超时_java – Eclipse中的Tomcat服务器超时
  7. java a =a-=aa_java 初学 :求 s=a+aa+aaa+aaaa+aa...a 的值,其中 a 是一个数字。几个 数相加由键盘控制。...
  8. docker mysql镜像 使用_docker下MySQL镜像的使用方法
  9. 什么叫做展望_开学季:有一种爱, 叫做爸妈给你塞的行李箱!(附大学新生行李箱应怎么选?)...
  10. 第三章EF的基本使用 EF添加数据实体模型