響應式RWD網頁動畫該如何實現,他有哪些實現方式呢?

對於Web開發者來說,不管什麼細分方向,比如數據可視化、網站系統、電商網站等等,都會涉及到一個難題“動畫”。因為動畫關係到Web開發的兩個比較重要的點,一是視覺效果,二是用戶體驗,通過酷炫動畫效果可以給視覺加不少分,同樣,恰到好處的微動效也會給用戶體驗帶來不錯的驚喜,基於此,我們的Web動畫該如何實現,他有哪些實現方式呢?

動畫形式大概梳理了下,動畫有不止以下幾種形式:
一、CSS3動畫
二、JS動畫
三、Canvas動畫
四、SVG動畫
五、以Three.js為首的3D動畫

針對以上動畫形式,我們來簡單介紹下吧。

一、CSS3動畫

CSS3動畫是我目前工作中用到最多的動畫形式,因為它書寫簡單,性能好,不需要懂JavaScript也能寫動畫,甚至可以實現一些三維立體效果。CSS3動畫又包含幾種,比如,transform,transition,animation。

Transform(變形)

transform變包含了rotate(旋轉)、scale(縮放)、translate(移動)、skew(扭曲)以及matrix(矩陣變形)。我們一般會結合transition來使用,使元素變形的過程變的平滑。

Transition(過渡)

CSS3中的transition是讓元素的屬性值在一定時間區間內平滑過渡,還可以定義變換速率。不是所有的屬性都支持過渡的,或者說有很多屬性都支持過渡,所以最好還是了解下,沒準下次我們就能創造不一樣的動畫效果了呢!

屬性名稱 類型
background-color color
background-image only gradients
background-position percentage, length
border-bottom-color color
border-bottom-width length
border-color color
border-left-color color
border-left-width length
border-right-color color
border-right-width length
border-spacing length
border-top-color color
border-top-width length
border-width length
bottom length, percentage
color color
crop rectangle
font-size length, percentage
font-weight number
grid-* various
height length, percentage
left length, percentage
letter-spacing length
line-height number, length, percentage
margin-bottom length
margin-left length
margin-right length
margin-top length
max-height length, percentage
max-width length, percentage
min-height length, percentage
min-width length, percentage
opacity number
outline-color color
outline-offset integer
outline-width length
padding-bottom length
padding-left length
padding-right length
padding-top length
right length, percentage
text-indent length, percentage
text-shadow shadow
top length, percentage
vertical-align keywords, length, percentage
visibility visibility
width length, percentage
word-spacing length, percentage
z-index integer
zoom number

Animation(動畫)

“關鍵幀”是指在某個時間點上,定義元素的狀態,如果把動畫時間區間裡面,每個時間點都定義元素狀態,這種叫逐針動畫,這種形式一般用在動畫軟件製作上才會用到,因為製作成本高,所以我們一般會採用另一種更方便、更簡單的實現方式,就是補間動畫。補間動畫是指我們定義好兩個時間節點上元素的狀態,中間元素變化的過程由計算機幫我們計算好,比如下面的例子:

@keyframes swing {
  20% {
    -webkit-transform: rotate3d(0, 0, 1, 15deg);
    transform: rotate3d(0, 0, 1, 15deg);
  }
  40% {
    -webkit-transform: rotate3d(0, 0, 1, -10deg);
    transform: rotate3d(0, 0, 1, -10deg);
  }
  60% {
    -webkit-transform: rotate3d(0, 0, 1, 5deg);
    transform: rotate3d(0, 0, 1, 5deg);
  }
  80% {
    -webkit-transform: rotate3d(0, 0, 1, -5deg);
    transform: rotate3d(0, 0, 1, -5deg);
  }
  to {
    -webkit-transform: rotate3d(0, 0, 1, 0deg);
    transform: rotate3d(0, 0, 1, 0deg);
  }
}

二、JS動畫

JS動畫一般是通過定時器和計時器來實現元素屬性的不斷變化,這裡一般常用的有jQuery的animate()方法。JS動畫這裡不做太多介紹,因為我平時用的也不多。

三、Canvas動畫

<canvas id="canvas" width="500" height="500"></canvas>
<script>
    var canvas = document.getElementById("canvas");
    var context = canvas.getContext("2d");
    var canvasWidth = context.canvas.width;//動畫的寬
    var canvasHeight = context.canvas.height;//動畫的高
    var x = 0;
    function animation(){
        x++;//用於更新動畫元素的X坐標位置
        context.clearRect(0, 0, canvasWidth, canvasHeight);//清除動畫
        context.fillRect(x,250,10,10);//繪製一個橫向運動的矩形
        setTimeout(animation,33);        
    }
    animation();
</script>

四、SVG動畫

SVG入門可以學習《SVG精髓》這本書,關於SVG動畫方面下面簡單介紹一下。
<animate> SVG內置了一些動畫元素,比如:
屬性能隨時間改變屬性值
<animateMotion>屬性使元素沿著動作路徑移動
<animateTransform>屬性使SVG隨時間操作Transform,這與CSS3中的Transform屬性類似
<animateColor>屬性隨時間修改對應屬性的顏色值
但是因為以上動畫元素兼容性不是很好,所以建議大家盡量使用元素屬性來進行SVG的動畫製作,比如stroke-dasharry, stroke-dashoffset,可以實現描邊動畫,可以看下我之前做的案例。

五、以Three.js為首的3D動畫

Three.js是一個基於JavaScript,使用方便,運行在瀏覽器中的輕量級的3D框架,可以用它創建各種三維場景,包括攝影機,光影及材質等各種對象,並且提供了Canvas、SVG 、CSS 3D及WebGL4中渲染器。 目前兼容到IE10,需要降級處理。

裡面的動畫原理和Canvas動畫有點相同,也是通過Three.js的API接口,來不斷快速的改變元素屬性和狀態,形成動畫效果。 它不僅僅可以創建動畫效果,還可以創建元素對象,我們CSS中,元素對像一般是用CSS樣式來控制的,而Three.js可以直接通過JS創建元素對象。

總結

以上我們對Web動畫形式進行了簡單的介紹,我們平時最常用的還是CSS3動畫,我們也會根據項目需求,調整動畫形式,這裡我們沒有將如何製作一個動畫效果,而是大概念的梳理了下目前實現動畫的形式,讓大家在平時工作的過程中,不要專注於實現一個動畫而忘記了實現動畫有很多形式。對於復雜動畫我們有時會用幀動畫來實現,那幀動畫有哪些實現方式呢,我們後面也將繼續介紹。

(此篇文章為網路轉載,如有冒犯,請來信告知,當即刻移除!)