ホームページ >ウェブフロントエンド >H5 チュートリアル >HTML5 Canvas を使用したクールなビッグウェーブ進捗グラフエフェクトの例 (デモ付き)

HTML5 Canvas を使用したクールなビッグウェーブ進捗グラフエフェクトの例 (デモ付き)

黄舟
黄舟オリジナル
2017-02-22 14:19:382082ブラウズ

この記事では、HTML5 Canvas のクールなビッグウェーブ進捗グラフ効果を紹介します。詳細は次のとおりです:

HTML5 Canvas を使用したクールなビッグウェーブ進捗グラフエフェクトの例 (デモ付き)

上の図でわかるように、この記事は上記の効果を実現するためのものです。

AlloyTouch は最近、プルダウン更新によるクールなローディング効果を記述する必要があるためです。したがって、大きな波の進行図が好まれます。

まず、Big Wave Picture Progress コンポーネントをカプセル化する必要があります。基本的な原理は、Canvas を使用してベクター グラフィックスや画像素材を描画し、波の効果を合成することです。

quadraticCurveTo について

quadraticCurveTo() メソッドは、2 次ベジェ曲線を表す指定された制御点を使用して、現在のパスに点を追加します。

JavaScript構文:

context.quadraticCurveTo(cpx,cpy,x,y);



パラメータ値

cpx ベジェ制御点のx座標

cpy ベジェ制御点のy座標

x 終点のx座標

y 終了 点

の y 座標:

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



上記のコードを通じて 2 次ベジェ曲線を描くことができます。具体的な原理効果を以下の図に示します。

HTML5 Canvas を使用したクールなビッグウェーブ進捗グラフエフェクトの例 (デモ付き)

波を描くには

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();



無限の動きで波を見ることができます:

HTML5 Canvas を使用したクールなビッグウェーブ進捗グラフエフェクトの例 (デモ付き)

ここで必要なのは、スイング補正画像を隠すために描画領域をキャンバスよりも大きくすることです。上記で使用されています。

コードを複製して、大きなキャンバスに描画してみると、理解できるでしょう。

ここでは、if (-1 offset === d2) offset = 0; によって無限ループが実装されています。

d2は波の山+波の谷の長さです。波の山+波の谷を経ると、また同じライフサイクルが始まりますが、これは0からスタートするのと同じなので、0にリセットすることができます。

globalCompositeOperation を理解する

globalCompositeOperation プロパティは、キャンバスに描画された色がキャンバス上に既にある色とどのように組み合わされるかを説明します。

ビッグ ウェーブの進行状況チャートの描画には、次のものが使用されます。

ctx.globalCompositeOperation = "destination-atop";



destination-atop 意味: キャンバス上の既存のコンテンツは、新しいグラフィックと重なる部分にのみ保持されます。新しい形状はコンテンツの後に描画されます。

もちろん、globalCompositeOperation にはここにリストされていない多くのオプションがありますが、クールなオーバーレイ効果を調整するために他のプロパティを設定してみることもできます。

全体的な実装

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";



コードをシンプルかつ直接的にするために、ここでローダーコードをカプセル化し、イメージをロードするために新しい Image を介して src を直接設定する必要はありません。

ベクター画像を描画した後、globalCompositeOperationを設定してからペンギン画像を描画します。描画順序を間違えてはいけません。

最後に

サンプルのダウンロード: デモ

上記は、HTML5 Canvas のクールなビッグ ウェーブ進行チャート エフェクトのサンプル (デモ付き) の内容です。その他の関連コンテンツについては、PHP 中国語 Web サイト (www. php.cn)!

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。