Home Web Front-end H5 Tutorial Example of cool big wave progress chart effect using HTML5 Canvas (with demo)

Example of cool big wave progress chart effect using HTML5 Canvas (with demo)

Feb 22, 2017 pm 02:19 PM

This article introduces the cool big wave progress chart effect of HTML5 Canvas, the details are as follows:

Example of cool big wave progress chart effect using HTML5 Canvas (with demo)

As you can see in the picture above, this article is to achieve the above effect.

Because AlloyTouch recently needs to write a cool loading effect with pull-down refresh. Therefore, the large wave progress chart is preferred.

First of all, we need to encapsulate the big wave picture progress component. The basic principle is to use Canvas to draw vector graphics and picture materials to synthesize wave effects.

Understanding quadraticCurveTo

The quadraticCurveTo() method adds a point to the current path by using a specified control point that represents a quadratic Bezier curve.

JavaScript syntax:

context.quadraticCurveTo(cpx,cpy,x,y);
Copy after login



Parameter value

cpx x of Bezier control point Coordinates

cpy The y coordinate of the Bezier control point

x The x coordinate of the end point

y The y coordinate of the end point

For example:

ctx.moveTo(20,20);
ctx.quadraticCurveTo(20,100,200,20);
ctx.stroke();
Copy after login



A quadratic Bezier curve can be drawn through the above code. The specific principle and effect can be seen in the figure below:

Example of cool big wave progress chart effect using HTML5 Canvas (with demo)

Try to draw waves

var waveWidth = 300,
    offset = 0,
    waveHeight = 8,
    waveCount = 5,
    startX = -100,
    startY = 208,
    progress = 0,
    progressStep = 1,
    d2 = waveWidth / waveCount,
    d = d2 / 2,
    hd = d / 2,
    c = document.getElementById("myCanvas"),
    ctx = c.getContext("2d");

function tick() {
    offset -= 5;
    progress += progressStep;
    if (progress > 220 || progress < 0) progressStep *= -1;

    if (-1 * offset === d2) offset = 0;
    ctx.clearRect(0, 0, c.width, c.height);
    ctx.beginPath();
    var offsetY = startY - progress;
    ctx.moveTo(startX - offset, offsetY);

    for (var i = 0; i < waveCount; i++) {
        var dx = i * d2;
        var offsetX = dx + startX - offset;
        ctx.quadraticCurveTo(offsetX + hd, offsetY + waveHeight, offsetX + d, offsetY);
        ctx.quadraticCurveTo(offsetX + hd + d, offsetY - waveHeight, offsetX + d2, offsetY);
    }
    ctx.lineTo(startX + waveWidth, 300);
    ctx.lineTo(startX, 300);
    ctx.fill();

    requestAnimationFrame(tick);
}

tick();
Copy after login



You can see waves with infinite motion:

Example of cool big wave progress chart effect using HTML5 Canvas (with demo)

What is needed here is that the drawing area is larger than the Canvas to hide the swing correction image. The Canvas of 200200 is used above.

You can clone the code and try to draw it on a large Canvas to understand.

The infinite loop is implemented here through if (-1 offset === d2) offset = 0;.

d2 is the length of a wave peak + wave trough. After a wave peak + a wave trough, the same life cycle starts again and starts from 0, so it can be reset to 0.

Understanding globalCompositeOperation

The globalCompositeOperation property describes how colors drawn to the canvas are combined with colors already on the canvas.

Drawing a big wave progress chart will use:

ctx.globalCompositeOperation = "destination-atop";
Copy after login



destination-atop Meaning: The content already on the canvas will only be added to it and Where the new graphics overlap is preserved. The new shape is drawn after the content.

Of course, globalCompositeOperation has many options, which are not listed here. You can try setting other properties to adjust cool overlay effects.

Overall implementation

var img = new Image();
function tick() {
    ...
    ...
    ctx.fill();
    ctx.globalCompositeOperation = "destination-atop";
    ctx.drawImage(img, 0, 0);
    requestAnimationFrame(tick);
}

img.onload = function () {
    tick();
};

img.src = "asset/alloy.png";
Copy after login



In order to make the code simple and direct, there is no need to encapsulate a loader code here, directly Use new Image to set src to load images.

After drawing the vector image, set globalCompositeOperation, and then draw the penguin image. The drawing order cannot be mistaken.

Finally

Example download: demo

The above is the content of the HTML5 Canvas cool big wave progress chart effect example (with demo), For more related content, please pay attention to the PHP Chinese website (www.php.cn)!

Statement of this Website
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn

Hot AI Tools

Undresser.AI Undress

Undresser.AI Undress

AI-powered app for creating realistic nude photos

AI Clothes Remover

AI Clothes Remover

Online AI tool for removing clothes from photos.

Undress AI Tool

Undress AI Tool

Undress images for free

Clothoff.io

Clothoff.io

AI clothes remover

AI Hentai Generator

AI Hentai Generator

Generate AI Hentai for free.

Hot Article

R.E.P.O. Energy Crystals Explained and What They Do (Yellow Crystal)
4 weeks ago By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Best Graphic Settings
4 weeks ago By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. How to Fix Audio if You Can't Hear Anyone
4 weeks ago By 尊渡假赌尊渡假赌尊渡假赌
WWE 2K25: How To Unlock Everything In MyRise
1 months ago By 尊渡假赌尊渡假赌尊渡假赌

Hot Tools

Notepad++7.3.1

Notepad++7.3.1

Easy-to-use and free code editor

SublimeText3 Chinese version

SublimeText3 Chinese version

Chinese version, very easy to use

Zend Studio 13.0.1

Zend Studio 13.0.1

Powerful PHP integrated development environment

Dreamweaver CS6

Dreamweaver CS6

Visual web development tools

SublimeText3 Mac version

SublimeText3 Mac version

God-level code editing software (SublimeText3)

Table Border in HTML Table Border in HTML Sep 04, 2024 pm 04:49 PM

Guide to Table Border in HTML. Here we discuss multiple ways for defining table-border with examples of the Table Border in HTML.

HTML margin-left HTML margin-left Sep 04, 2024 pm 04:48 PM

Guide to HTML margin-left. Here we discuss a brief overview on HTML margin-left and its Examples along with its Code Implementation.

Nested Table in HTML Nested Table in HTML Sep 04, 2024 pm 04:49 PM

This is a guide to Nested Table in HTML. Here we discuss how to create a table within the table along with the respective examples.

HTML Table Layout HTML Table Layout Sep 04, 2024 pm 04:54 PM

Guide to HTML Table Layout. Here we discuss the Values of HTML Table Layout along with the examples and outputs n detail.

HTML Input Placeholder HTML Input Placeholder Sep 04, 2024 pm 04:54 PM

Guide to HTML Input Placeholder. Here we discuss the Examples of HTML Input Placeholder along with the codes and outputs.

HTML Ordered List HTML Ordered List Sep 04, 2024 pm 04:43 PM

Guide to the HTML Ordered List. Here we also discuss introduction of HTML Ordered list and types along with their example respectively

Moving Text in HTML Moving Text in HTML Sep 04, 2024 pm 04:45 PM

Guide to Moving Text in HTML. Here we discuss an introduction, how marquee tag work with syntax and examples to implement.

HTML onclick Button HTML onclick Button Sep 04, 2024 pm 04:49 PM

Guide to HTML onclick Button. Here we discuss their introduction, working, examples and onclick Event in various events respectively.

See all articles