摘要:每周一點動畫是一個系列文章,本文并不對的做過多的介紹,我默認你已經了解基本的繪圖,并在此告訴你如何使用簡單的數學與物理知識創建相當酷炫的動畫。下一節,我們就正式開始我們的動畫之旅
《每周一點canvas動畫》是一個系列文章,本文并不對canvas的API做過多的介紹,我默認你已經了解基本的canvas繪圖API,并在此告訴你如何使用簡單的數學與物理知識創建相當酷炫的動畫。一說到物理和數學知識各位騷年們是不是感覺蛋疼(原諒我說臟話了),不過我要告訴你,我們用到的數學和物理知識真的很簡單,一點都不可怕。
1.支持情況canvas作為H5中最為重要的新增特性,使開發者可以用它來創作各種令人驚嘆的作品。但開發者最關心的問題肯定是瀏覽器的支持情況(圖片來自張鑫旭博客)!
2.本文主要內容本系列文章主要介紹Canvas 2D動畫原理,以及簡單的如何在2D平面模仿3D效果的方法,中間可能會穿插一些與其他技術相結合的DEMO和項目。首先,我們創作動畫的基本文檔結構如下。
canvas動畫序
在此我們需要明白動畫的基本概念:
動畫其實是由不同的靜態畫面組成,每一幅靜態畫面我們叫做一幀(frame),當眾多的靜態畫面按照一定的規則快速運動時,我們的眼睛就會欺騙我們的大腦,從而形成物體運動的假象。在這里先給大家展示用Canvas創作的兩個酷炫動畫,看看它是否夠簡潔,夠酷炫!
第一個動畫是一個用Canvas做的百分比加載動畫(根據讀者的建議,已經對錯誤的代碼做了修改)。codePen地址
var canvas = document.getElementById("canvas"), //獲取canvas元素 context = canvas.getContext("2d"), //獲取畫圖環境,指明為2d centerX = canvas.width/2, //Canvas中心點x軸坐標 centerY = canvas.height/2, //Canvas中心點y軸坐標 rad = Math.PI*2/100, //將360度分成100份,那么每一份就是rad度 speed = 0.1; //加載的快慢就靠它了 //繪制藍色外圈 function blueCircle(n){ context.save(); context.beginPath(); context.strokeStyle = "#49f"; context.lineWidth = 12; context.arc(centerX, centerY, 100 , -Math.PI/2, -Math.PI/2 + n*rad, false); context.stroke(); context.restore(); } //繪制白色外圈 function whiteCircle(){ context.save(); context.beginPath(); context.strokeStyle = "#A5DEF1"; context.lineWidth = 12; context.arc(centerX, centerY, 100 , 0, Math.PI*2, false); context.stroke(); context.closePath(); context.restore(); } //百分比文字繪制 function text(n){ context.save(); context.fillStyle = "#F47C7C"; context.font = "40px Arial"; context.textAlign = "center"; context.textBaseline = "middle"; context.fillText(n.toFixed(0)+"%", centerX, centerY); context.restore(); } //動畫循環 (function drawFrame(){ window.requestAnimationFrame(drawFrame, canvas); context.clearRect(0, 0, canvas.width, canvas.height); whiteCircle(); text(speed); blueCircle(speed); if(speed > 100) speed = 0; speed += 0.1; }());