この記事では、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 次ベジェ曲線を描くことができます。具体的な原理効果を以下の図に示します。
波を描くには
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();
無限の動きで波を見ることができます:
ここで必要なのは、スイング補正画像を隠すために描画領域をキャンバスよりも大きくすることです。上記で使用されています。
コードを複製して、大きなキャンバスに描画してみると、理解できるでしょう。
ここでは、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)!