圧縮アップロード画像、スクラッチカード、ポスター作成、チャートプラグインなど、フロントエンド開発において、キャンバスはグラフィック描画に欠かせないタグ要素となっています。面接の過程で、キャンバスグラフィック描画に触れたことがあるかどうか、多くの人に尋ねられます。 意味キャンバス要素は、スクリプト (通常は 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 の他の関連記事に注目してください。 以下もご興味があるかもしれません:
|
<<: Centos7 に Zabbix3.0 をインストールするための非常に詳細な手順
>>: Linux/CentOS システムでネットワーク時間を同期する 2 つの方法の詳細な説明
目次1. サーバーAのmy.cnfファイルを変更する2. サーバーBのmy.cnfファイルを変更する...
次のコードは、私の test.html にあります。ビデオは、c:\test.html などの絶対パ...
AWS - Amazon のクラウド コンピューティング サービス プラットフォーム以前、AWS の...
クリックハウスの紹介ClickHouse は、SQL クエリを使用して分析データ レポートをリアルタ...
多くの場合、Web デザインが完成した後でデザイナーの無知が露呈し、批判されることがあります。彼らは...
目次安定スロットリング要約する安定自動ドアは人を感知してドアを開け、5 秒間のカウントダウンを開始し...
01. VMware Workstation Pro 15 のダウンロードダウンロード: VMwa...
VueはPCカメラを呼び出してリアルタイムで写真を撮影します。参考までに、具体的な内容は次のとおりで...
序文フェイルオーバーが発生した後、よくある問題は同期エラーです。データベースが小さい場合は、ダンプし...
はじめに: MySQL は、スウェーデンの MySQL AB によって開発されたリレーショナル デー...
スロットとは何ですか? Vue では、子コンポーネント タグの中央に何もラップできないことはわかって...
<br />最近、UCDChina は「インターフェース上のテキストに注意を払う」という...
目次Tomcat でプロジェクトを展開する 3 つの方法プロジェクトをwebappsディレクトリに直...
目次1. はじめに2. 製品テーブルを準備する2.1 ステートメントの順序2.2 大文字と小文字の区...
前提条件: content="width=750" <meta name=...