Jadual Kandungan
Set up the canvas element
Get the canvas context
Create a simple animation loop
Add collision detection (optional)
Key tips for better canvas animations
Rumah hujung hadapan web Tutorial H5 Cara Membuat Animasi Kanvas HTML5

Cara Membuat Animasi Kanvas HTML5

Sep 09, 2025 am 02:47 AM

要创建HTML5 canvas动画,需先设置canvas元素并获取2D上下文,然后使用requestAnimationFrame循环更新画面;例如绘制一个移动的蓝色圆形,通过不断清除画布并重绘其新位置实现动画效果,添加边界检测可让圆形碰到边缘时反弹,结合变量更新与绘图步骤即可实现流畅运动,最终可通过对象数组扩展为多个动画元素,整个过程依赖逐帧重绘和状态更新来模拟动态视觉效果。

How to create an HTML5 canvas animation

Creating an HTML5 canvas animation is straightforward once you understand the basics of the <canvas> element and JavaScript’s role in drawing and updating visuals over time. Here’s how to build a simple animation — like a moving circle — step by step.

Set up the canvas element

Start by adding a <canvas> element to your HTML file. Give it an id so you can reference it in JavaScript, and set width and height attributes.

<canvas id="myCanvas" width="800" height="400"></canvas>

You can style it with CSS if needed, but the actual drawing happens in JavaScript.

Get the canvas context

Inside a script tag or external JS file, get the 2D rendering context. This object provides methods and properties to draw and animate shapes.

const canvas = document.getElementById('myCanvas');
const ctx = canvas.getContext('2d');

Create a simple animation loop

Animations on canvas work by repeatedly clearing the canvas and redrawing elements in slightly different positions. Use requestAnimationFrame() to create a smooth, efficient loop.

function animate() {
    // Clear the canvas
    ctx.clearRect(0, 0, canvas.width, canvas.height);

    // Draw your frame (example: a moving circle)
    ctx.beginPath();
    ctx.arc(x, y, radius, 0, Math.PI * 2);
    ctx.fillStyle = 'blue';
    ctx.fill();
    ctx.closePath();

    // Update position
    x += dx;
    y += dy;

    // Loop the animation
    requestAnimationFrame(animate);
}

// Initial position and movement
let x = 50;
let y = 50;
let dx = 3;
let dy = 2;
let radius = 20;

// Start the animation
animate();

This code moves a blue circle across the canvas. When it hits the edges, it will keep going off-screen unless you add boundary checks.

Add collision detection (optional)

To make the circle bounce off the walls, check its position against the canvas edges:

if (x + radius > canvas.width || x - radius < 0) {
    dx = -dx; // Reverse horizontal direction
}
if (y + radius > canvas.height || y - radius < 0) {
    dy = -dy; // Reverse vertical direction
}

Place this inside the animate() function before calling requestAnimationFrame.

Key tips for better canvas animations

  • Use requestAnimationFrame instead of setInterval – It syncs with the screen’s refresh rate for smoother performance.
  • Always clear the canvas – Use clearRect() at the start of each frame unless you want trailing effects.
  • Keep drawing code inside the animation loop – Anything you want to move or change must be redrawn each frame.
  • Separate logic from drawing – Update positions and states first, then draw.
  • Control speed with delta timing – For more advanced control, factor in time between frames to keep motion consistent across devices.

For example, you could expand this to animate multiple objects by storing them in an array:

const balls = [];

for (let i = 0; i < 5; i++) {
    balls.push({
        x: Math.random() * canvas.width,
        y: Math.random() * canvas.height,
        dx: Math.random() * 5 - 2.5,
        dy: Math.random() * 5 - 2.5,
        radius: Math.random() * 20 + 10,
        color: `rgb(${Math.random()*255},${Math.random()*255},${Math.random()*255})`
    });
}

function animate() {
    ctx.clearRect(0, 0, canvas.width, canvas.height);

    balls.forEach(ball => {
        ctx.beginPath();
        ctx.arc(ball.x, ball.y, ball.radius, 0, Math.PI * 2);
        ctx.fillStyle = ball.color;
        ctx.fill();
        ctx.closePath();

        // Update position
        ball.x += ball.dx;
        ball.y += ball.dy;

        // Bounce off walls
        if (ball.x + ball.radius > canvas.width || ball.x - ball.radius < 0) {
            ball.dx = -ball.dx;
        }
        if (ball.y + ball.radius > canvas.height || ball.y - ball.radius < 0) {
            ball.dy = -ball.dy;
        }
    });

    requestAnimationFrame(animate);
}

animate();

Basically, that’s all you need to get started. Once you understand the animation loop and how to manipulate shapes over time, you can build anything from simple bouncing balls to games or data visualizations. The key is redrawing everything each frame and updating just enough to create the illusion of motion.

Atas ialah kandungan terperinci Cara Membuat Animasi Kanvas HTML5. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn

Alat AI Hot

Undress AI Tool

Undress AI Tool

Gambar buka pakaian secara percuma

Undresser.AI Undress

Undresser.AI Undress

Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover

AI Clothes Remover

Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Stock Market GPT

Stock Market GPT

Penyelidikan pelaburan dikuasakan AI untuk keputusan yang lebih bijak

Alat panas

Notepad++7.3.1

Notepad++7.3.1

Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina

SublimeText3 versi Cina

Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1

Hantar Studio 13.0.1

Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6

Dreamweaver CS6

Alat pembangunan web visual

SublimeText3 versi Mac

SublimeText3 versi Mac

Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Topik panas

Bagaimana untuk membuat pemain audio dengan kawalan tersuai di HTML5? Bagaimana untuk membuat pemain audio dengan kawalan tersuai di HTML5? Sep 16, 2025 am 04:21 AM

Mula -mula membuat elemen audio tersembunyi dan membina UI kawalan tersuai, dan kemudian sambungkan fungsi seperti main balik, jeda, pelarasan kemajuan dan kawalan kelantangan ke API audio melalui JavaScript untuk mencapai pemain audio yang diperibadikan sepenuhnya.

Bagaimana cara menggunakan acara pelayan-sent (SSE) di HTML5? Bagaimana cara menggunakan acara pelayan-sent (SSE) di HTML5? Sep 21, 2025 am 06:11 AM

Sseenablesreal-time, unidirectionalserver-to-clientupdatesviahttp; useeventsourceinjavascripttoconnect, handlemessagesageWithonmessage, setServerresponsetypetotex

Bagaimana untuk menguruskan fokus untuk kebolehcapaian dalam HTML5? Bagaimana untuk menguruskan fokus untuk kebolehcapaian dalam HTML5? Sep 21, 2025 am 05:27 AM

PenggunaanSemantichtmlelementsLikeandfornativeFocususabilityandkoardsupport.ensurelogicalTabordorderandvisiblefocusindicatorsviacs.programmaticallymanageFocusindynamiccontentlikemodalsusingElement.Focus (), TrappingFocusIdeAdingRetRetRED

Bagaimana cara menggunakan peranan ARIA untuk kebolehcapaian di HTML5? Bagaimana cara menggunakan peranan ARIA untuk kebolehcapaian di HTML5? Sep 21, 2025 am 04:41 AM

AriaenhancesWebaccessibilitybyaddingsemanticmeaningtoelementswhennativeHtmlisinsufficient.useariaroleslikerole = "Button", aria-expanded, Andaria-labelforcustomponentsordynamiccontent, ButalwaysPrefreenativeHtmleLemeShtmluteHtmleLemeHtmLeShtmluteHtmluteShtmluteHtmleShtmluteHtMleShtmluteHtmluteHtmluteHtmluteHtmluteHtmleShtmLeShtmLeShtmLeShtMleS

Bagaimana cara menggunakan elemen  di HTML5 dengan betul? Bagaimana cara menggunakan elemen di HTML5 dengan betul? Sep 17, 2025 am 06:33 AM

Thetimeelementinhtml5representsdatesandtimesinamachine-readableFormat, enhancingAccessibilityandseo; usethedateTimeatTributewithiso-formattedvaluestoprovideSemantiNingMeaning, terutama friendlytexordurations, terutama friendlyextextextordurations

Bagaimana untuk mengesahkan medan borang terhadap ungkapan biasa dalam HTML5? Bagaimana untuk mengesahkan medan borang terhadap ungkapan biasa dalam HTML5? Sep 22, 2025 am 05:11 AM

Usethepatternattributeinhtml5InputelementStovalidateAgainStaregex, suchorfasswordsrequiringnumbers, huruf besar, huruf kecil, danminimumlength;

Cara Membuat Peta Imej HTML5 Responsif Cara Membuat Peta Imej HTML5 Responsif Sep 17, 2025 am 04:34 AM

Untuk membuat peta imej HTML5 responsif, anda boleh menyelaras skala secara dinamik melalui JavaScript atau benar -benar meletakkan elemen overlay menggunakan CSS; Mula-mula pastikan imej itu sendiri responsif, dan kemudian mengira semula kawasan kawasan yang menyelaras mengikut nisbah saiz asal dan semasa melalui JavaScript apabila pemuatan halaman dan pelarasan tetingkap, atau menggunakan pautan telus untuk menutupi imej dengan kedudukan peratusan untuk mencapai penyesuaian silang silang, dan akhirnya memastikan bahawa kawasan interaktif adalah tepat dengan imej. Kedua -dua kaedah ini mempunyai senario yang berkenaan. Penyelesaian JavaScript bersesuaian dengan struktur asal, dan penyelesaian CSS lebih mudah dan tidak memerlukan skrip. Ia harus dipilih mengikut keperluan projek, dan kedua-duanya perlu menguji kesan multi-skrin dan memastikan kawasan sentuhan cukup besar. Adalah disyorkan untuk menggunakan kaedah JavaScript untuk susun atur peta kompleks.

Bagaimana untuk membenamkan dokumen PDF dalam halaman HTML5? Bagaimana untuk membenamkan dokumen PDF dalam halaman HTML5? Sep 21, 2025 am 05:08 AM

Menggunakan atau membenamkan PDF; Ia mudah dan langsung, menyokong kandungan alternatif, mempunyai keserasian yang baik dan boleh dikeluarkan dari sempadan, dan pilih mengikut keperluan anda.

See all articles