jsはキャンバスに基づいて時計コンポーネントを実装します

jsはキャンバスに基づいて時計コンポーネントを実装します

圧縮アップロード画像、スクラッチカード、ポスター作成、チャートプラグインなど、フロントエンド開発において、キャンバスはグラフィック描画に欠かせないタグ要素となっています。面接の過程で、キャンバスグラフィック描画に触れたことがあるかどうか、多くの人に尋ねられます。

意味

キャンバス要素は、スクリプト (通常は JavaScript) を通じてグラフィックスを描画するために使用されます。
キャンバス タグは単なるグラフィック コンテナーなので、グラフィックを描画するにはスクリプトを使用する必要があります。

ブラウザのサポート

Internet Explorer 9、Firefox、Opera、Chrome、Safari をサポート

この記事では、キャンバス API に慣れるために時計コンポーネントを使用します。

<!DOCTYPE html>
<html>
<ヘッド>
<メタ文字セット="UTF-8" />
<title>キャンバス時計</title>
<スタイル>
*{マージン:0;パディング:0;}
本文{text-align:center;padding-top:100px;}
</スタイル>
</head>
<本文>
<canvas id="時計" 幅="200px" 高さ="200px"></canvas>
<スクリプト>
(関数 (win) {
	関数DrawClock(オプション){
		this.canvas = オプション.el;
		this.ctx = this.canvas.getContext('2d'); // メソッドはキャンバスに描画するための環境を返します this.width = this.ctx.canvas.width;
		this.height = this.ctx.canvas.height;
		this.r = this.width / 2;
		this.rem = this.width / 200;
		this.digits = [3、4、5、6、7、8、9、10、11、12、1、2];

	  var self = this;
	  自己初期化();
	  setInterval(関数(){
	  	自己初期化();
	  }, 1000);
	}

	DrawClock.prototype = {
		初期化: 関数(){
			var ctx = this.ctx;
			ctx.clearRect(0, 0, this.width, this.height); //指定された四角形内の指定されたピクセルをクリアします。var now = new Date();
			var hours = now.getHours();
			var minutes = now.getMinutes();
			var 秒 = now.getSeconds();

			var hour = hours >= 12 ? hours - 12 : hours;
			var minute = 分 + 秒 / 60;

			背景を描画します。
			this.drawHour(時間、分);
			this.drawMinute(分);
			this.drawSecond(秒);
			ドットを描画します。
			ctx.restore();
		},
		背景を描画: 関数(){
			var ctx = this.ctx;
			var self = this;
			ctx.save();
			ctx.translate(this.r, this.r); //キャンバス上の (0,0) 位置を再マップします ctx.beginPath();
			ctx.lineWidth = 8 * this.rem;
			ctx.arc(0, 0, this.r - ctx.lineWidth / 2, 0, 2 * Math.PI, false); //円弧/曲線を作成します(円または部分円を作成するために使用します)
			ctx.stroke();
			ctx.font = 16 * this.rem + "px Arial"; //テキストコンテンツの現在のフォントプロパティを設定または返します ctx.textAlign = "center"; //テキストコンテンツの現在の配置を設定または返します ctx.textBaseline = "middle"; //テキストを描画するときに使用する現在のテキストベースラインを設定または返します this.digits.forEach(function(number, i){
				var rad = 2 * Math.PI / 12 * i;
				var x = Math.cos(rad) * (self.r - 33 * self.rem);
				var y = Math.sin(rad) * (self.r - 33 * self.rem);
				ctx.fillText(number, x, y); // キャンバスに「塗りつぶされた」テキストを描画します });

			//分目盛り、1分あたり6度
			(var i = 0; i < 60; i++){
				ctx.save(); //現在の環境の状態を保存します ctx.rotate(6 * i * Math.PI / 180); //現在の描画を回転します ctx.beginPath(); //パスを開始するか、現在のパスをリセットします ctx.moveTo(0, -82 * this.rem); //線を作成せずに、キャンバス内の指定されたポイントにパスを移動します ctx.lineTo(0, -87 * this.rem); //新しいポイントを追加し、そのポイントからキャンバス内の最後の指定されたポイントまで線を作成します ctx.closePath(); //現在のポイントから開始ポイントに戻るパスを作成します ctx.strokeStyle = '#000'; //ストロークに使用される色、グラデーション、またはモードを設定するか返します ctx.lineWidth = 1 * this.rem; //現在の線の幅を設定するか返します ctx.stroke(); //定義されたパスを描画します ctx.restore(); //以前に保存したパスの状態とプロパティを返します }
			//時間スケール、1時間ごとに30度回転
			(var i = 0; i < 12; i++){
				ctx.save();
				ctx.rotate(30 * i * Math.PI / 180);
				ctx.beginPath();
				ctx.moveTo(0, -79 * this.rem);
				ctx.lineTo(0, -87 * this.rem);
				ctx.closePath();
				ctx.strokeStyle = '#000';
				ctx.lineWidth = 2 * this.rem;
				ctx.stroke();
				ctx.restore();
			}
		},
		drawHour: 関数(時間、分){
			var ctx = this.ctx;
			ctx.save();
			ctx.beginPath();
			var hRad = 2 * Math.PI / 12 * 時間;
			var mRad = 2 * Math.PI / 12 / 60 * 分;
			ctx.rotate(hRad + mRad);
			ctx.lineWidth = 6 * this.rem;
			ctx.lineCap = "round"; // 線の終点のスタイルを設定または返します ctx.moveTo(0, 10 * this.rem);
			ctx.lineTo(0, -this.r / 2);
			ctx.stroke();
			ctx.restore();
		},
		drawMinute: 関数(分){
			var ctx = this.ctx;
			ctx.save();
			ctx.beginPath();
			var rad = 2 * Math.PI / 60 * 分;
			ctx.rotate(rad);
			ctx.lineWidth = 3 * this.rem;
			ctx.lineCap = "丸い";
			ctx.moveTo(0, 10 * this.rem);
			ctx.lineTo(0, -this.r + 26 * this.rem);
			ctx.stroke();
			ctx.restore();
		},
		drawSecond: 関数(second){
			var ctx = this.ctx;
			ctx.save();
			ctx.beginPath();
			ctx.fillStyle = "#c14543";
			var rad = 2 * Math.PI / 60 * 秒;
			ctx.rotate(rad);
			ctx.moveTo(-3 * this.rem、20 * this.rem);
			ctx.lineTo(3 * this.rem、20 * this.rem);
			ctx.lineTo(1, -this.r + 26 * this.rem);
			ctx.lineTo(-1, -this.r + 26 * this.rem);
			ctx.fill(); //現在の描画(パス)を塗りつぶす
			ctx.restore();
		},
		drawDot: 関数(分){
			var ctx = this.ctx;
			ctx.beginPath();
			ctx.fillStyle = "#fff";
			ctx.arc(0, 0, 3 * this.rem, 0, 2 * Math.PI, false);
			ctx.fill();
		}
	};

    win.DrawClock = DrawClock;
})(ウィンドウ);

新しい DrawClock({el: document.getElementById("clock")});
</スクリプト>
</本文>
</html>

心に丘と谷があれば、2エーカーの土地を耕作することができます。キャンバス クロックは、キャンバス内のほとんどの API を使用します。キャンバス クロックのコード実装を学習することで、キャンバスの特性とメソッドを理解できます。同時に、クロック効果を実現する際には、数学における正弦、余弦、ラジアンの計算方法の幾何学モデルが使用され、昔数学を学習した楽しさが再現されます。一石二鳥と言えるでしょう。

クロック効果図は次のとおりです。

以上が、js で canvas をベースに時計コンポーネントを実装する方法の詳細です。canvas で実装した時計コンポーネントの詳細については、123WORDPRESS.COM の他の関連記事に注目してください。

以下もご興味があるかもしれません:
  • JavaScript キャンバス テキスト クロック
  • js とキャンバスを使用して時計効果を実現する
  • 時計効果を実現する JavaScript キャンバスアニメーション
  • JavaScript Canvas はカラフルなウェブ時計を作成します
  • JavaScript + HTML5 キャンバス描画時計機能の例
  • 時計効果を実現するJS+H5キャンバス
  • JS+Canvas でダイナミックな時計効果を描く
  • JavaScript Canvas は円形の時計効果を描画します
  • js Canvasは円形の時計効果を描画します
  • js Canvas で実装されたカレンダー クロック ケース共有
  • js Canvas で円形時計を実現するチュートリアル

<<:  Centos7 に Zabbix3.0 をインストールするための非常に詳細な手順

>>:  Linux/CentOS システムでネットワーク時間を同期する 2 つの方法の詳細な説明

推薦する

HTML テーブル境界コントロールの詳細な説明

上の境界線のみを表示する <table frame=above>下の境界線のみを表示する...

面接では、select...for update がテーブルをロックするのか、それとも行をロックするのか尋ねられました。

目次確認する:例の検証と組み合わせるselect クエリ ステートメントはロックされませんが、sel...

MySQL インデックス プッシュダウンを 5 分で学ぶ

目次序文インデックス プッシュダウンとは何ですか?インデックスプッシュダウン最適化の原理インデックス...

Vue モバイル プロジェクトでページ キャッシュを実装する方法のサンプル コード

背景モバイル デバイスでは、ページ ジャンプ間のキャッシュが必須要件です。例: ホームページ =&g...

nginxで複数のサーバーを簡単に構成する方法

1: nginx のインストール方法については詳しく説明しません。Baidu で検索してください。 ...

binlog2sql と簡単なバックアップおよびリカバリを使用して mysql8.0.20 を構成するための詳細な手順

目次最初のステップのインストールステップ2: MySQLデータを準備する3 番目のステップは、bin...

Alibaba Cloud Nginx はドメイン名アクセス プロジェクトを実装するために https を設定します (グラフィック チュートリアル)

ステップ1: サードパーティの信頼できるSSL証明書に署名するAlibaba Cloud で直接、無...

mysql 8.0.16 winx64.zip インストールと設定方法のグラフィックチュートリアル

この記事では、MySQL 8.0.16 winx64.zipのインストールと設定方法の具体的なコード...

DockerにRabbitMQをインストールする詳細な手順

目次1. 鏡を見つける2. RabbitMQイメージをダウンロードする3. RabbitMQコンテナ...

mysqldump でデータベースをバックアップするときに特定のライブラリを除外する例

例: mysqldump –all-databases を使用すると、すべてのライブラリがエクスポー...

Vue が scss (mixin) をグローバルに導入

目次1. ミックスイン.scss 2. 単一ファイルの使用3. グローバルマウント3.1 依存関係の...

CSS のみを使用して折りたたまれたヘッダー効果を作成する方法の例コード

折りたたまれたヘッダーは、特別オファーや重要なお知らせなど、ユーザーにとって重要な情報を表示するのに...

2級コンピュータ試験のMySQL知識ポイント mysql alterコマンド

テーブル構造を編集するための MySQL の alter コマンドの使用。具体的な内容は以下のとおり...

MySQLでSQL文がどのように実行されるかの詳細な説明

概要最近MySQL関連の知識を勉強し始めました。学んだ知識ポイントと自分の理解を元に整理して共有しま...

Filebeat を使用して Nginx ログを収集する方法

Nginx ログは、ユーザーの住所の場所や行動プロファイルなどを分析するために使用できます。Elas...