1. 程式人生 > >你也可以做一個小米魅族網站(WOW.js:WOW.js – 在頁面滾動時展現動感的元素動畫效果)

你也可以做一個小米魅族網站(WOW.js:WOW.js – 在頁面滾動時展現動感的元素動畫效果)

可視區域動畫:

aos.js        :http://www.jq22.com/jquery-info8150

scrollReveal.js                :http://top.css88.com/archives/384

簡介

有的頁面在向下滾動的時候,有些元素會產生細小的動畫效果。雖然動畫比較小,但卻能吸引你的注意。比如剛剛釋出的 iPhone 6 的頁面(檢視)。如果你希望你的頁面也更加有趣,那麼你可以試試 WOW.js。

WOW.js 依賴 animate.css,所以它支援 animate.css 多達 60 多種的動畫效果,能滿足您的各種需求。

瀏覽器相容

這裡寫圖片描述

使用方法

1、引入檔案

<code class="hljs xml has-numbering" style="display: block; padding: 0px; color: inherit; box-sizing: border-box; font-family: "Source Code Pro", monospace;font-size:undefined; white-space: pre; border-radius: 0px; word-wrap: normal; background: transparent;"><span class="hljs-tag" style="color: rgb(0, 102, 102); box-sizing: border-box;"><<span class="hljs-title" style="box-sizing: border-box; color: rgb(0, 0, 136);">link</span> <span class="hljs-attribute" style="box-sizing: border-box; color: rgb(102, 0, 102);">rel</span>=<span class="hljs-value" style="box-sizing: border-box; color: rgb(0, 136, 0);">"stylesheet"</span> <span class="hljs-attribute" style="box-sizing: border-box; color: rgb(102, 0, 102);">href</span>=<span class="hljs-value" style="box-sizing: border-box; color: rgb(0, 136, 0);">"css/animate.min.css"</span>></span></code><ul class="pre-numbering" style="box-sizing: border-box; position: absolute; width: 50px; top: 0px; left: 0px; margin: 0px; padding: 6px 0px 40px; border-right-width: 1px; border-right-style: solid; border-right-color: rgb(221, 221, 221); list-style: none; text-align: right; background-color: rgb(238, 238, 238);"><li style="box-sizing: border-box; padding: 0px 5px;">1</li></ul>

2、HTML

<code class="hljs applescript has-numbering" style="display: block; padding: 0px; color: inherit; box-sizing: border-box; font-family: "Source Code Pro", monospace;font-size:undefined; white-space: pre; border-radius: 0px; word-wrap: normal; background: transparent;"><<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">div</span> <span class="hljs-type" style="box-sizing: border-box;">class</span>=<span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"wow slideInLeft"</span>></<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">div</span>>
<<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">div</span> <span class="hljs-type" style="box-sizing: border-box;">class</span>=<span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"wow slideInRight"</span>></<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">div</span>></code><ul class="pre-numbering" style="box-sizing: border-box; position: absolute; width: 50px; top: 0px; left: 0px; margin: 0px; padding: 6px 0px 40px; border-right-width: 1px; border-right-style: solid; border-right-color: rgb(221, 221, 221); list-style: none; text-align: right; background-color: rgb(238, 238, 238);"><li style="box-sizing: border-box; padding: 0px 5px;">1</li><li style="box-sizing: border-box; padding: 0px 5px;">2</li></ul>

可以加入 data-wow-duration(動畫持續時間)和 data-wow-delay(動畫延遲時間)屬性,如:

<code class="hljs lasso has-numbering" style="display: block; padding: 0px; color: inherit; box-sizing: border-box; font-family: "Source Code Pro", monospace;font-size:undefined; white-space: pre; border-radius: 0px; word-wrap: normal; background: transparent;"><span class="hljs-subst" style="color: rgb(0, 0, 0); box-sizing: border-box;"><</span>div class<span class="hljs-subst" style="color: rgb(0, 0, 0); box-sizing: border-box;">=</span><span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"wow slideInLeft"</span> <span class="hljs-built_in" style="color: rgb(102, 0, 102); box-sizing: border-box;">data</span><span class="hljs-attribute" style="box-sizing: border-box;">-wow</span><span class="hljs-attribute" style="box-sizing: border-box;">-duration</span><span class="hljs-subst" style="color: rgb(0, 0, 0); box-sizing: border-box;">=</span><span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"2s"</span> <span class="hljs-built_in" style="color: rgb(102, 0, 102); box-sizing: border-box;">data</span><span class="hljs-attribute" style="box-sizing: border-box;">-wow</span><span class="hljs-attribute" style="box-sizing: border-box;">-delay</span><span class="hljs-subst" style="color: rgb(0, 0, 0); box-sizing: border-box;">=</span><span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"5s"</span><span class="hljs-subst" style="color: rgb(0, 0, 0); box-sizing: border-box;">><</span>/div<span class="hljs-subst" style="color: rgb(0, 0, 0); box-sizing: border-box;">></span>
<span class="hljs-subst" style="color: rgb(0, 0, 0); box-sizing: border-box;"><</span>div class<span class="hljs-subst" style="color: rgb(0, 0, 0); box-sizing: border-box;">=</span><span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"wow slideInRight"</span> <span class="hljs-built_in" style="color: rgb(102, 0, 102); box-sizing: border-box;">data</span><span class="hljs-attribute" style="box-sizing: border-box;">-wow</span><span class="hljs-attribute" style="box-sizing: border-box;">-offset</span><span class="hljs-subst" style="color: rgb(0, 0, 0); box-sizing: border-box;">=</span><span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"10"</span>  <span class="hljs-built_in" style="color: rgb(102, 0, 102); box-sizing: border-box;">data</span><span class="hljs-attribute" style="box-sizing: border-box;">-wow</span><span class="hljs-attribute" style="box-sizing: border-box;">-iteration</span><span class="hljs-subst" style="color: rgb(0, 0, 0); box-sizing: border-box;">=</span><span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"10"</span><span class="hljs-subst" style="color: rgb(0, 0, 0); box-sizing: border-box;">><</span>/div<span class="hljs-subst" style="color: rgb(0, 0, 0); box-sizing: border-box;">></span></code><ul class="pre-numbering" style="box-sizing: border-box; position: absolute; width: 50px; top: 0px; left: 0px; margin: 0px; padding: 6px 0px 40px; border-right-width: 1px; border-right-style: solid; border-right-color: rgb(221, 221, 221); list-style: none; text-align: right; background-color: rgb(238, 238, 238);"><li style="box-sizing: border-box; padding: 0px 5px;">1</li><li style="box-sizing: border-box; padding: 0px 5px;">2</li></ul>

3、JavaScript

<code class="hljs cs has-numbering" style="display: block; padding: 0px; color: inherit; box-sizing: border-box; font-family: "Source Code Pro", monospace;font-size:undefined; white-space: pre; border-radius: 0px; word-wrap: normal; background: transparent;"><span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">new</span> WOW().init();</code><ul class="pre-numbering" style="box-sizing: border-box; position: absolute; width: 50px; top: 0px; left: 0px; margin: 0px; padding: 6px 0px 40px; border-right-width: 1px; border-right-style: solid; border-right-color: rgb(221, 221, 221); list-style: none; text-align: right; background-color: rgb(238, 238, 238);"><li style="box-sizing: border-box; padding: 0px 5px;">1</li></ul>

要自定義配置,可如下使用:

<code class="hljs cs has-numbering" style="display: block; padding: 0px; color: inherit; box-sizing: border-box; font-family: "Source Code Pro", monospace;font-size:undefined; white-space: pre; border-radius: 0px; word-wrap: normal; background: transparent;"><span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">var</span> wow = <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">new</span> WOW({
    boxClass: <span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">'wow'</span>,
    animateClass: <span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">'animated'</span>,
    offset: <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">0</span>,
    mobile: <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">true</span>,
    live: <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">true</span>
});
wow.init();</code><ul class="pre-numbering" style="box-sizing: border-box; position: absolute; width: 50px; top: 0px; left: 0px; margin: 0px; padding: 6px 0px 40px; border-right-width: 1px; border-right-style: solid; border-right-color: rgb(221, 221, 221); list-style: none; text-align: right; background-color: rgb(238, 238, 238);"><li style="box-sizing: border-box; padding: 0px 5px;">1</li><li style="box-sizing: border-box; padding: 0px 5px;">2</li><li style="box-sizing: border-box; padding: 0px 5px;">3</li><li style="box-sizing: border-box; padding: 0px 5px;">4</li><li style="box-sizing: border-box; padding: 0px 5px;">5</li><li style="box-sizing: border-box; padding: 0px 5px;">6</li><li style="box-sizing: border-box; padding: 0px 5px;">7</li><li style="box-sizing: border-box; padding: 0px 5px;">8</li></ul>

配置

這裡寫圖片描述

外掛描述:aos.js是一款效果超讚的頁面滾動元素動畫jQuery動畫庫外掛。該動畫庫可以在頁面滾動時提供28種不同的元素動畫效果,以及多種easing效果。在頁面往回滾動時,元素會恢復到原來的狀態。

簡要教程

aos.js是一款效果超讚的頁面滾動元素動畫jQuery動畫庫外掛。該動畫庫可以在頁面滾動時提供28種不同的元素動畫效果,以及多種easing效果。在頁面往回滾動時,元素會恢復到原來的狀態。

安裝

可以通過bower來安裝aos動畫庫外掛。

bower install aos --save

使用方法

在頁面中引入aos.css檔案,jquery和aos.js檔案

<link rel="stylesheet" href="dist/aos.css" />
<script src="js/jquery.min.js"></script>
<script src="dist/aos.js"></script>

HTML結構

要使用aos動畫庫,你需要做的就是在需要動畫的元素上新增aos屬性,例如:

<div aos="animation_name">

aos指令碼將會在頁面滾動時,在該元素上觸發相應的動畫。

在元素上還可以新增以下一些屬性:

屬性 屬性 屬性 預設值
aos-offset 是立刻觸發動畫還是在指定時間之後觸發動畫 200 120
aos-duration 動畫持續時間 600 400
aos-easing 動畫的easing動畫效果 ease-in-sine ease
aos-delay 動畫的延遲時間 300 0
aos-anchor 錨元素。使用它的偏移來取代實際元素的偏移來觸發動畫 #selector null
aos-anchor-placement 錨位置,觸發動畫時元素位於螢幕的位置 top-center top-bottom
aos-once 動畫是否只會觸發一次,或者每次上下滾動都會觸發 true false

注意,aos-duration的動畫持續時間的範圍從50-3000毫秒,如果你想設定更大的值,可以在頁面中新增下面的CSS程式碼:

body[aos-duration='4000'] [aos], [aos][aos][aos-duration='4000']{
  transition-duration: 4000ms;
}

上面的程式碼將動畫的持續時間修改為4000毫秒。

示例程式碼:

<div aos="fade-zoom-in" aos-offset="200" aos-easing="ease-in-sine" aos-duration="600">
<div aos="flip-left" aos-delay="100" aos-anchor=".example-selector">
<div aos="fade-up" aos-anchor-placement="top-center">

如果你擔心HTML5校驗的問題,可以為上面的屬性新增data-字首。

<div data-aos="animation_name" data-aos-offset="200" data-aos-easing="ease-in-sine">

全域性配置

如果你不想單獨每個元素做一個動畫配置,你可以通過init()方法來統一配置所有元素的動畫效果。

AOS.init({
  offset: 200,
  duration: 600,
  easing: 'ease-in-sine',
  delay: 100,
});

額外配置

AOS提供了2個額外的配置方法,這些方法只能夠在初始化時使用。

配置 描述 示例值 預設值
disable AOS被禁用的條件 mobile false
startEvent AOS被初始化的事件名稱 exampleEvent DOMContentLoaded

禁用AOS:

如果你項在小螢幕裝置中禁用AOS,可以:

AOS.init({
  disable: 'mobile'
});

你可以傳入3種裝置的型別:mobile、phone或tablet。

你也可以設定自己的禁用條件,例如在螢幕小於1024畫素時禁用AOS:

disable: window.innerWidth < 1024

或者傳入一個函式,返回true或false。

disable: function () {
    var maxWidth = 1024;
    return window.innerWidth < maxWidth;
}

開始動畫的事件:

如果你不想滾動動畫從頁面載入(DOMContentLoaded)後就開始執行,可以使用startEvent來設定自己的事件,AOS會在document上監聽這個事件:

AOS.init({
  startEvent: 'someCoolEvent'
});

API

AOS物件有2個可用的方法:

  • init

  • refresh

AOS.refresh();

上面的程式碼會重新計算元素的位置和偏移。

動畫和錨位置

動畫

淡入淡出動畫:

  • fade-up

  • fade-down

  • fade-left

  • fade-right

  • fade-up-right

  • fade-up-left

  • fade-down-right

  • fade-down-left

翻轉動畫:

  • flip-up

  • flip-down

  • flip-left

  • flip-right

滑動動畫:

  • slide-up

  • slide-down

  • slide-left

  • slide-right

縮放動畫:

  • zoom-in

  • zoom-in-up

  • zoom-in-down

  • zoom-in-left

  • zoom-in-right

  • zoom-out

  • zoom-out-up

  • zoom-out-down

  • zoom-out-left

  • zoom-out-right

錨位置

  • top-bottom

  • top-center

  • top-top

  • center-bottom

  • center-center

  • center-top

  • bottom-bottom

  • bottom-center

  • bottom-top

easing動畫

你可以使用以下的一些easing動畫效果:

  • linear

  • ease

  • ease-in

  • ease-out

  • ease-in-out

  • ease-in-back

  • ease-out-back

  • ease-in-out-back

  • ease-in-sine

  • ease-out-sine

  • ease-in-out-sine

  • ease-in-quad

  • ease-out-quad

  • ease-in-out-quad

  • ease-in-cubic

  • ease-out-cubic

  • ease-in-out-cubic

  • ease-in-quart

  • ease-out-quart

  • ease-in-out-quart