Html5キャンバスパーティクルクロック サンプルコード
次のように、パーティクルクロックの効果を見てみましょう。
ここでは、canvas と js を使って実装します。
まず、以下のようにhtmlファイルを作成し、canvasキャンバスを追加します。
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Document</title>
<style>
.container{
margin: 0, auto;
width: 600px;
}
</style>
</head>
<body>
<div id="container">
<canvas id="canvas"></canvas>
</div>
</body>
次の素材digit.jsをインポートし、以下のように0〜9の合計10文字の数字とコロンの2次元配列で素材を綴っています。
1である文字が構成していることがわかります。
ここで、キャンバスの作成方法を説明します。
function Clock() {
var canvas = document.getElementById("canvas");
canvas.width = 600;
canvas.height = 100;
this.cxt = canvas.getContext('2d');
this.cxt.fillStyle = "#ddd";
this.cxt.fillRect(0, 0, 500, 100);
}
上記のコードを実行すると、ブラウザに小さなグレーのキャンバスが描画されます。
で解析を始めましょう。
1. データマトリックスを理解する?それは多次元配列です
2. 円はどうやって描くのですか?
2.1 まず半径を知ること?
上の図から、円の中心は次の順序で並んでいることがわかります。
r+1
r+1 + (r+1)*2*1
r+1 + (r+1)*2*2
....
r+1 + (r+1)*2*i
また、半径は、次のように円の高さを計算することで求めることができます。
円の高さは(r+1)*2であり、キャンバスの高さは10個の円で構成されている
canvasHeight = (r+1)*2*10
キャンバスの高さを100にすると、rが出て、円の中心xyが出て、円の描画を開始します
まず、上のClockオブジェクトにrを計算するステートメントを追加する必要があります。
this.r = 100/20-1;
ここでは、Clockのプロトタイプにdrawメソッドを追加しています。
Clock.prototype.draw = function(num, index) {
this.cxt.fillStyle="#000";
for (let i=0; i<digit[num].length; i++) {
for (let j=0; j<digit[num][i].length; j++) {
if (digit[num][i][j] == 1) {
this.cxt.beginPath();
this.cxt.arc(index*70+(this.r+1)+(this.r+1)*2*j, (this.r+1)+(this.r+1)*2*i, this.r, 0, Math.PI*2, false);
this.cxt.closePath();
this.cxt.fill();
}
}
}
}
draw は2つの引数を取り、1つ目は文字のインデックス、2つ目は文字のオフセット順序、70はオフセット距離で、これはカスタマイズ可能である。
最初のforは、レンダリングする文字の配列を取得します。2番目のforは、レンダリングする各行を取得し、1の文字だけをレンダリングします。
次に、時間を取得する必要があります。これは、次のように正規表現を使用して新しい日付から直接取得することができます。
Clock.prototype.getTime = function() {
var reg = /(\d)(\d):(\d)(\d):(\d)(\d)/.exec(new Date());
var data = [];
data.push(reg[1], reg[2], 10, reg[3], reg[4], 10, reg[5], reg[6]);
for (var i=0; i<data.length; i++) {
this.draw(data[i], i);
}
}
時、分、秒は、配列をプッシュするときのフォーマット対応に注意すれば、簡単に正規の方法で取得できます。ここで、10はdigit.jsの10文字目、つまりコロンです
なお、この方法で描画すると、キャンバスの更新ができないという問題があるので、次のように追加します。
canvas.height= 100
これで、以下のようにコードを実行することができます。
var clock = new Clock();
setInterval(()=>{
clock.getTime();
})
そこ、OKです
今回の記事は以上です!勉強になります!そして、もっとスクリプトハウスを応援してほしいです。
関連
-
サンプルレートとビットレートを設定してmp3オーディオを録音するhtml5
-
キャンバスが折り畳みパスを描くアニメーション
-
CAPTCHAを生成するHTML5サンプルコード
-
boostrapのモーダルフラッシュ問題の解決法
-
高解像度画面でのキャンバスブラーの問題を記憶する
-
HTML5 のタッチ イベント(touchstart、touchmove、touchend)の実装
-
左右の高さの差がありすぎる問題を解決するための小型プログラムウォーターフォール
-
キャンバスの描画は、contain または cover モードで適応され、中央に配置されます。
-
キャンバスラバーバンド線引き塗布方法
-
キャンバスに丸みを帯びたアバターを描く方法
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
HTML5セマンティックタグ(モバイル必須)
-
HTMLコンパスクロックの実装
-
HTML5 ドラッグ&ドロップによるファイルアップロードのサンプルコード
-
キャンバスをベースにしたHTML5で電子署名を実現、PDF文書も生成可能
-
データストレージの3つの方法、Cookie sessionstorage localstorageの類似点と相違点の分析
-
iPhoneXの画面適応 WeChatアプリとH5でセーフエリア下部の小さな黒いバー
-
html5モバイル価格入力キーボードの実装
-
QRコードポスター付きキャンバス生成の落とし穴記録
-
キャンバスの幅と高さの設定に関する問題点
-
html2 canvasで印刷用の鮮明な画像を生成