Cara menggunakan ngView dengan aplikasi AngularJS untuk mencapai kesan animasi_AngularJS

WBOY
Lepaskan: 2016-05-16 15:53:49
asal
1607 orang telah melayarinya

AngularJS menyediakan cara yang bagus untuk mencipta aplikasi satu halaman. Atas sebab inilah tapak kami kelihatan lebih seperti aplikasi mudah alih asli. Untuk menjadikannya lebih kelihatan seperti program asli, kami boleh menggunakan modul ngAnimate untuk menambah peralihan dan kesan animasi padanya.

Modul ini membolehkan kami mencipta program yang cantik. Hari ini, kita akan melihat cara menghidupkan ng-view.
Apa yang akan kita bina

Katakan kita mempunyai program satu halaman dan ingin menambah kesan animasi pada halaman ini. Mengklik pada pautan akan meluncur satu percubaan keluar dan satu lagi masuk.

Kami akan menggunakan:

  • Gunakan ngRoute untuk menghalakan halaman kami
  • Gunakan ngAnimate untuk mencipta kesan animasi untuk halaman
  • Gunakan Animasi CSS pada halaman
  • Apabila kami meninggalkan atau memasuki paparan, setiap halaman kami akan mempunyai kesan animasi yang berbeza

Animasi Melampau: Kesan animasi yang kami gunakan di sini adalah yang dinyatakan di atas. Kesan animasi yang indah boleh menambah banyak warna pada tapak anda. Hanya halaman demo sudah cukup untuk membuat kami gila. *Kesan animasi datang daripada Koleksi Peralihan Halaman

pada Codrops

Bagaimana ia berfungsi?

Mari kita lihat cara ngAnimate berfungsi. ngAnimate akan menambah dan mengalih keluar nama kelas CSS yang berbeza untuk arahan Sudut yang berbeza bergantung pada sama ada anda memasuki atau meninggalkan paparan. Sebagai contoh, apabila kita memuatkan tapak web, apa sahaja yang diisi dalam ng-view akan mendapat nama kelas .ng-enter.

Apa yang perlu kita lakukan ialah menambah kesan animasi CSS pada nama kelas .ng-enter, dan animasi akan berkuat kuasa secara automatik apabila masuk.

ngAnimate boleh digunakan untuk: ngRepeat, ngInclude, ngIf, ngSwitch, ngShow, ngHide, ngView dan ngClass

Pastikan anda menyemak dokumentasi ngAnimate untuk mengetahui lebih lanjut tentang ciri ngAnimate. Seterusnya, mari lihat dalam tindakan.

Mulakan proses kami

Dokumen berikut yang kami perlukan:

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

Mari kita mulakan dengan index.html, kita akan memuatkan AngularJS, ngRoute dan ngAnimate. Ngomong-ngomong, jangan lupa gunakan Bootstrap untuk menentukan gaya.


<!-- index.html -->
<!DOCTYPE html>
<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 src="http://code.angularjs.org/1.2.13/angular.js"></script>
  <script src="http://ajax.googleapis.com/ajax/libs/angularjs/1.2.13/angular-route.js"></script>
  <script src="http://ajax.googleapis.com/ajax/libs/angularjs/1.2.13/angular-animate.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>
Salin selepas log masuk

Di atas ialah fail HTML kami yang sangat mudah. Muatkan sumber yang kami perlukan, tentukan aplikasi Angular kami dan tambahkan nama kelas ng-view untuk paparan yang kami suntik.

Mari kita lihat beberapa fail lain yang kita perlukan:

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

Apl program Angular kami.js

Sekarang, kami perlu mencipta program Sudut dengan penghalaan supaya kami boleh mengubah suai halaman kami tanpa memuat semula halaman.

// app.js
 
// 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';
});
Salin selepas log masuk

Kini, kami mencipta aplikasi, laluan dan pengawal kami.

Setiap pengawal mempunyai pembolehubah pageClass sendiri. Nilai yang diubah akan ditambahkan pada ng-view dalam fail index.html, supaya setiap halaman kami mempunyai nama kelas yang berbeza. Melalui nama kelas yang berbeza ini, kita boleh menambah kesan animasi yang berbeza pada halaman yang berbeza.

Lihat page-home.html, page-about.html, page-contact.html

Ini hendaklah disimpan sejelas dan sejelas mungkin. Kami hanya perlu menyediakan beberapa teks untuk setiap halaman dan alamat pautan ke halaman lain.

<!-- 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 -->
<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 -->
<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>
Salin selepas log masuk

现在,我们拥有了我们的页面,通过使用Angular的路由功能可以将这些页面注入到我们的主index.html文件中。

现在,所有的乏味的工作已经完成。我们的程序应该可以正常工作,并且可以很好的修改页面。接下来,让我们进入下一步,为页面添加动画效果!

为App添加动画效果 style.css

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

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

为了使我们的程序看起来不那么乏味,我们将会添加一些基础的样式。

/* 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; }
Salin selepas log masuk

通过以上的代码,我们为3个页面添加了基础的样式。当我们点击程序的时候,我们可以看到它们应用了不同的颜色和间距。

CSS 动画

让我们定义我们的动画效果,之后我们将会了解一下当页面进入或离开的时候我们怎么才能为不同的页面应用不用的动画效果。

Vendor Prefixes: 我们将会使用默认的CSS属性,不带任何前缀的。完整的代码会包含所有的前缀。

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

/* style.css */
...
 
/* ANIMATIONS
============================================================================= */
 
/* 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); }
}
Salin selepas log masuk

结合以上我们所定义的动画效果,我们将会把它们应用到我们的页面上。
进入和离开动画效果

我们只需要将这些动画效果应用给.ng-enter 或 .ng-leave就可以为我们的页面添加不用的动画效果。

/* style.css */
...
 
  .ng-enter       { animation: scaleUp 0.5s both ease-in; z-index: 8888; }
  .ng-leave       { animation: slideOutLeft 0.5s both ease-in; z-index: 9999; }
 
...
Salin selepas log masuk

现在,我们的程序就会有像上面那样的动画效果了。当离开的时候,页面会向左滑出,当进入的时候会放大。我们还添加了z-index属性,以便离开的页面会处于进入的页面的上层。

让我们看一下如何为具体的页面创建动画。

具体页面的动画效果

我们为不同的页面创建了各自的Angular 控制器。在这些控制器里面,我们添加了一个pageClass并且将它添加到我们的

中。我们将会使用这些类名来引出具体的页面。

不像上面的.ng-enter 和 .ng-leave那样,我们使它们更加具体化。


...
 
  .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; }
 
...
Salin selepas log masuk

现在,每一个页面都有它各自唯一的进入和离开的动画效果。
总结

为我们的Angular程序添加动画效果是相当容易的。你所需要做的就是加载ngAnimate并创建你的CSS动画效果。真诚的希望这篇文章可以帮助你了解一些使用ng-view时的一些比较酷的动画效果。

View Code : http://plnkr.co/edit/uW4v9T?p=info

Label berkaitan:
sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan