CSS動畫–讓div動起來

CSS動畫

今天在寫程式碼時候,遇到了css動畫效果如何實現的問題,經過查閱和實踐,總結出一下結論。

 transition 

transition 指定動畫變化的對應屬性 以及動畫的執行時間。
例如:transition:width 1s;  意思就是當width發生變化時,變化執行1s。
這種可以實現簡單的動畫效果,但對於複雜的動畫,還不能夠滿足。
 在此基礎上,我還新發現一個對於css動畫更高級的屬性–animation
animation是結合@keyframes (關鍵幀)進行使用的。
用法:
 1 .graduallymove{
 2             background-image: url(../../img/1.jpg);//設置背景
 3             background-size:cover;//設置背景圖片的樣式 鋪滿整個div
 4             position: relative;//設置div的位置屬性為相對定位
 5             top: 100px;//設置距離上邊100px
 6             left: 800px;
 7             width: 500px;//設置div寬度為500px
 8             height: 400px;
 9             transition: 1s;//設置div動畫效果執行1s
10             box-shadow: 0 0 30px rgba(0, 0, 0, .5);//陰影效果 范範圍30px 黑色半透明 四周
11             animation: graduallymove 1.5s ease-out 0.2s ;//設置對象為 garduallymove 1.5s動畫 先快後慢 0.2s延遲後再發生
12         }
 1   @keyframes graduallymove {
 2             0%{
 3                 opacity: 0;
 4                 top: 100px;
 5                 left: 0px;
 6 
 7             }
 8            
 9           
10             
11             100%{
12                 opacity: 1;
13                 top: 100px;
14                 left: 800px;
15             }
16         }
<body>
    <!-- <div class="leftmove"></div> -->
    <div class="graduallymove"></div>
</body>

效果就是,圖片從左向右漸入,最後停在右邊。位置為top:100px;left:800px;

對於animation,由於屬性複雜,我再單獨講講。

animation(包含以下幾個屬性值,可以混合寫到一起,最後講)

animation-name (動畫對象)

animation-name:表示動畫的對象。animation-name屬性指定應用的一系列動畫,每個名稱代表一個由@keyframes定義的動畫序列。

/* Single animation */單一對象
animation-name: none;
animation-name: test_05;
animation-name: -specific;
animation-name: sliding-vertically;

/* Multiple animations */複雜對象,多個對象
animation-name: test1, animation4;
animation-name: none, -moz-specific, sliding;

/* Global values */全局值
animation-name: initial  //最初的
animation-name: inherit//繼承的
animation-name: unset//不設置的

animation-duration (動畫時長)

animation-duration屬性指定一個動畫周期的時長。

默認值為0,表示無動畫效果。

注意:負值無效,瀏覽器會忽略該聲明,但是一些早期的帶前綴的聲明會將負值當作0s。

animation-timing-function (動畫方式)

定義於一個關鍵幀區塊的緩動函數(animation timing function)應用到改關鍵幀;另外,若該關鍵幀沒有定義緩動函數,則使用定義於整個動畫的緩動函數。

 

描述
linear 規定以相同速度開始至結束的過渡效果(等於 cubic-bezier(0,0,1,1))。(勻速)
ease 規定慢速開始,然後變快,然後慢速結束的過渡效果(cubic-bezier(0.25,0.1,0.25,1))(相對於勻速,中間快,兩頭慢)。
ease-in 規定以慢速開始的過渡效果(等於 cubic-bezier(0.42,0,1,1))(相對於勻速,開始的時候慢,之後快)。
ease-out 規定以慢速結束的過渡效果(等於 cubic-bezier(0,0,0.58,1))(相對於勻速,開始時快,結束時候間慢,)。
ease-in-out 規定以慢速開始和結束的過渡效果(等於 cubic-bezier(0.42,0,0.58,1))(相對於勻速,(開始和結束都慢)兩頭慢)。
cubic-bezier(n,n,n,n) 在 cubic-bezier 函數中定義自己的值。可能的值是 0 至 1 之間的數值。

animation-delay (動畫延遲)

animation-delay CSS屬性定義動畫於何時開始,即從動畫應用在元素上到動畫開始的這段時間的長度。

animation-iteration-count (動畫次數)

animation-iteration-count 定義動畫在結束前運行的次數 可以是1次 無限循環.

如果指定了多個值,每次播放動畫時,將使用列表中的下一個值,在使用最後一個值後循環回第一個值。

可選值:

infinite

無限循環播放動畫.

<number>動畫播放的次數;默認值為1

可以用小數定義循環,來播放動畫周期的一部分:例如,0.5 將播放到動畫周期的一半。不可為負值。

animation-direction (動畫方向)

animation-direction CSS 屬性指示動畫是否反向播放

可選值

normal

每個循環內動畫向前循環,換言之,每個動畫循環結束,動畫重置到起點重新開始,這是默認屬性。
alternate
動畫交替反向運行,反向運行時,動畫按步後退,同時,帶時間功能的函數也反向,比如,ease-in 在反向時成為 ease-out。計數取決於開始時是奇數迭代還是偶數迭代
reverse
反向運行動畫,每周期結束動畫由尾到頭運行。(動畫反向進行)
alternate-reverse
反向交替, 反向開始交替
動畫第一次運行時是反向的,然後下一次是正向,後面依次循環。決定奇數次或偶數次的計數從1開始。

animation-fill-mode (動畫保持)設置動畫最後的樣式為哪樣

animation-fill-mode 設置CSS動畫在執行之前和之後如何將樣式應用於其目標。

none

不設置任何樣式

forwards

最後一個關鍵幀的樣式(簡單點說就是)最後動畫的樣式

backwards

將在應用於目標時立即應用第一個關鍵幀中定義的值, (最初的動畫樣式)

both

兩個方向延展動畫樣式(個人覺得像forwards)

 

animation-play-state

animation-play-state 屬性定義一個動畫是否運行或者暫停。可以通過查詢它來確定動畫是否正在運行。另外,它的值可以被設置為暫停和恢復的動畫的重放。恢復一個已暫停的動畫,將從它開始暫停的時候,而不是從動畫序列的起點開始在動畫。

可選值

running

當前動畫正在運行。

paused

當前動畫已被停止。

可都將屬性寫到一起

animation:duration(動畫時長) | timing-function(動畫類型) | delay(動畫延遲) |iteration-count (動畫次數)| direction (動畫方向)| fill-mode(動畫保持) | play-state(動畫狀態) | name(動畫對象) ;

Tags: