快速切換的靜態畫面。canvas
繪製 - 清空 - 繪製 - 清空 - 繪製 ...
const canvas = document.getElementById('canvas'); /* 得到 2d 上下文對象 */ const ctx = canvas.getContext('2d'); let radialGradient; let distance = -50; const speed = 5; const draw = (axisX) => { /* 清空畫布(或部分清空) */ ctx.clearRect(0, 0, 600, 600); radialGradient = ctx.createRadialGradient(distance, 300, 10, distance, 300, 50); radialGradient.addColorStop(0, "#FFFFFF"); radialGradient.addColorStop(1, "#EA7F26"); ctx.fillStyle = radialGradient; ctx.beginPath(); ctx.moveTo(distance, 300); ctx.arc(distance, 300, 50, 0, 2 * Math.PI, false); ctx.fill(); distance = distance + speed; if (distance > 650) distance = -50; requestAnimationFrame(draw); } requestAnimationFrame(draw);ctx.clearRect(0, 0, 600, 600); ctx.beginPath(); ctx.moveTo(distance, 300); ctx.arc(distance, 300, 50, 0, 2 * Math.PI, false); ctx.fill(); distance = distance + speed;
從左到右勻速運動函數
const canvas = document.getElementById('canvas'); /* 得到 2d 上下文對象 */ const ctx = canvas.getContext('2d'); let radialGradient; let distance = 50; const speed = 5; let count = 1; /* * h = 9.8 * (Math.pow(t, 2)) / 2 */ const draw = (axisX) => { /* 清空畫布(或部分清空) */ ctx.clearRect(0, 0, 600, 600); radialGradient = ctx.createRadialGradient(300, distance, 10, 300, distance, 50); radialGradient.addColorStop(0, "#FFFFFF"); radialGradient.addColorStop(1, "#EA7F26"); ctx.fillStyle = radialGradient; ctx.beginPath(); ctx.moveTo(300, distance); ctx.arc(300, distance, 50, 0, 2 * Math.PI, false); ctx.fill(); count += 1; distance = 9.8 * (Math.pow(count, 2)) / 100; if (distance > 650) { distance = -50; count = 1; } requestAnimationFrame(draw); } requestAnimationFrame(draw);
從上到下模擬自由落體運動動畫
const canvas = document.getElementById('canvas'); /* 得到 2d 上下文對象 */ const ctx = canvas.getContext('2d'); let radialGradient; let distance = 0; let axis = 300; const speed = 5; const range = 200; let angle = 0; const draw = (axisX) => { /* 清空畫布(或部分清空) */ // ctx.clearRect(0, 0, 600, 600); radialGradient = ctx.createRadialGradient(distance, axis, 10, distance, axis, 50); radialGradient.addColorStop(0, "#FFFFFF"); radialGradient.addColorStop(1, "#EA7F26"); ctx.fillStyle = radialGradient; ctx.beginPath(); ctx.moveTo(distance, axis); ctx.arc(distance, axis, 50, 0, 2 * Math.PI, false); ctx.fill(); axis = 300 + Math.sin(angle) * range; distance = distance + speed; if (distance > 650) { distance = 0; angle = -.1; } angle += .1; requestAnimationFrame(draw); } requestAnimationFrame(draw);
const canvas = document.getElementById('canvas'); /* 得到 2d 上下文對象 */ const ctx = canvas.getContext('2d'); let radialGradient; let angle = 0.1; var scope = 20; let x = 300; let y = 100; const draw = (axisX) => { /* 清空畫布(或部分清空) */ ctx.clearRect(0, 0, 600, 600); radialGradient = ctx.createRadialGradient(x, y, 10, x, y, 50); radialGradient.addColorStop(0, "#FFFFFF"); radialGradient.addColorStop(1, "#EA7F26"); ctx.fillStyle = radialGradient; ctx.beginPath(); ctx.moveTo(x, y); ctx.arc(x, y, 50, 0, 2 * Math.PI, false); ctx.fill(); x = x + Math.cos(angle) * scope; y = y + Math.sin(angle) * scope; angle = angle + .1; requestAnimationFrame(draw); ctx.closePath(); ctx.beginPath(); ctx.arc(300, 300, 200, 0, 2 * Math.PI, false); ctx.stroke(); } requestAnimationFrame(draw);