この記事では、テキストクロックを実装するためのキャンバスの具体的なコードを例として紹介します。具体的な内容は次のとおりです。 まずはレンダリングを見てみましょう コード <!DOCTYPE html> <html lang="ja"> <ヘッド> <メタ文字セット="UTF-8"> <meta name="viewport" content="width=デバイス幅、初期スケール=1.0"> <meta http-equiv="X-UA-compatible" content="ie=edge"> <title>ドキュメント</title> </head> <本文> <canvas id="myCanvas" width="600" height="600">お使いのブラウザはキャンバスをサポートしていません</canvas> <スクリプト> var c = document.getElementById("myCanvas"); var ctx = c.getContext("2d"); ctx.translate(300,300); 関数 Clock(ctx){ ctx = ctx。 numbertext = ['zero'、 'one'、 'two'、 '3'、 'four'、 'five'、 'six'、 '"8、' 'nine'、 'ten'、 'twelve'、 'thirteen'、 'fourteen'、 '15'、 '' 'theventeen' '' twenteen '、' twenteen、 wo '、' twredee '、' twour '、' twenty ''、 'twenty' '、' twenty-ven '、' twenty-eight '、' twenty-nine '、' thirty '、' thir1-one ']; this.H=['0時','1時','2時','3時','4時','5時','6時','7時','8時','9時','10時','11時','12時','13時','14時','15時','16時','17時','18時','19時','20時','21時','22時']; : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : this.draw = 関数(){ this.ctx.clearRect(-300,-300,600,600); // 中央に小さな黒い円 this.ctx.beginPath(); this.ctx.arc(0,0,5,0,Math.PI*2,true); this.ctx.fill(); this.ctx.closePath(); // 長い水平線を描画します this.ctx.beginPath(); this.ctx.moveTo(0,0); ctx の行を 280 にします。 this.ctx.strokeStyle='#000'; this.ctx.stroke(); this.ctx.beginPath(); this.ctx.font='12px Microsoft YaHei'; var yearText = ''; var arr = String(this.year).split(''); (var n=0;n<arr.length;n++){ var num = Number(arr[n]); yearText += this.numberText[num]; } var weekday = this.day === 0 ? 'Sunday': 'week'+this.numberText[this.day]; // 週 var moText = this.numberText[this.mon]+'month'+ this.numberText[this.da]+'day'; this.ctx.fillText(yearText+'年',10,-10); // 年テキスト this.ctx.fillText(moText,10,20); // 月/日/週テキスト this.ctx.fillText(weekday,10,40); // 月/日/週テキスト this.drawClock(); } // スケールを描画する this.drawClock = function(){ // 時計 this.ctx.save(); // 現在の状態を保存します this.ctx.rotate(Math.PI / 12 * this.h); (var j=0; j < 24; j++){ this.ctx.beginPath(); var color = j === this.h ? '#000': '#ccc'; this.ctx.strokeStyle = 色; this.ctx.font='12px Microsoft YaHei'; this.ctx.strokeText(this.H[j],110,-5); this.ctx.closePath(); this.ctx.rotate(-Math.PI / 12); } this.ctx.restore(); // 最後の状態に復元 // 分 this.ctx.save(); this.ctx.rotate(Math.PI / 30 * this.m); (var i=0; i < 60; i++){ this.ctx.beginPath(); var color = i === this.m ? '#000': '#ccc'; this.ctx.strokeStyle = 色; this.ctx.strokeText(this.M[i],170,-5); this.ctx.closePath(); this.ctx.rotate(-Math.PI / 30); } this.ctx.restore(); // 秒 this.ctx.save(); this.ctx.rotate(Math.PI / 30 * this.s); (var k=0; k < 60; k++){ this.ctx.beginPath(); var color = k === this.s ? '#000': '#ccc'; this.ctx.strokeStyle = 色; this.ctx.strokeText(this.S[k],230,-5); this.ctx.closePath(); this.ctx.rotate(-Math.PI / 30); } this.ctx.restore(); // ctx.rotate(-Math.PI / 30 * this.s); } // 初期化 this.init = function(){ var that = this; this.timer = setInterval(関数(){ その.setTime(); that.draw(); },100); } // 停止 this.stop = function(){ タイマー間隔をクリアします。 this.timer = null; } // 時間を設定する this.setTime = function(){ var date = 新しい Date(); this.year = date.getFullYear(); // 年、int this.mon = date.getMonth()+1; // 月、int this.da = date.getDate(); // 日付、int this.day = date.getDay(); // 曜日、int var hour = date.getHours(); // 時間、int var minu = date.getMinutes(); // 分、int var sec = date.getSeconds(); // 秒、int // ミリ秒/1000、主にフレームアニメーション用 var minuScond = date.getMilliseconds()/1000; var second; // 秒、秒の回転角度を計算する、float var minute; // 分、分の角度を計算する、float var ho; // 時間、時間の角度を計算します、float if(minuScond > 0.8){ 秒 = Math.ceil(sec + minuScond); 秒 = 秒 >= 60? 0:秒; } それ以外 { 秒 = sec + minuScond; } // 秒が59に達したら、分が遷移する if (sec === 59) { if(minuScond >= 0.8){ 分 = Math.ceil(minu + minuScond); 分 = 分 >=60 ? 0: 分; } それ以外{ 分 = minu + minuScond; } } それ以外{ 分 = minu; } // 秒と分が 59 に達したので、時針を遷移させる必要があります if (sec === 59 && minu===59) { if(minuScond >= 0.8){ ho = Math.ceil(hour + minuScond); ho = ho >=24 ? 0: ho; } それ以外{ ho = 時間 + minuScond; } } それ以外{ ho = 時間; } this.h = ho; // 時間 this.m = minute; // 分 this.s = second; // 秒 } } var clock = new Clock(ctx); クロックを初期化します。 </スクリプト> </本文> </html> 以上がこの記事の全内容です。皆様の勉強のお役に立てれば幸いです。また、123WORDPRESS.COM を応援していただければ幸いです。 以下もご興味があるかもしれません:
|
>>: iviewは動的なフォームとカスタム検証期間の重複を実装します
必要最近、Node オンライン サービスを移行する必要があったため、2 つの新しいオンライン サーバ...
序文要素がビューポート内にあるかどうかを監視する2つの方法を共有する1. 位置計算Element.g...
目次1. 解凍コマンド1.1 構文1.2 オプション2. 例1. 解凍コマンドunzip コマンドは...
基本的な構文CREATE VIEW ステートメントを使用してビューを作成できます。構文の形式は次のと...
Linux に puppeteer をインストールするときに、次の問題が発生する可能性があります。こ...
導入Binlog ログ、つまりバイナリ ログ ファイルは、データベースに対するユーザー操作の SQL...
この方法は2021年2月7日に編集されました。私が使用しているバージョンは8.0.23です。事件の原...
1. 要素の幅/高さ/パディング/マージンのパーセンテージ基準要素の幅/高さ/パディング/マージンの...
通常は ul、li を介して選択のデフォルト スタイルを変更して、実現をシミュレートします。このよう...
この記事では、アコーディオン効果を実現するためのJavaScriptの具体的なコードを参考までに紹介...
目次1. リソースファイル2. インストール2.1 詳細な手順2.1.1 ディスクイメージのマウント...
目次プロジェクトでデータベースを操作する3つのステップデータベースを操作するための具体的な手順1: ...
目次1. Tomcatコードをダウンロードする2. ダウンロード後のディレクトリ構造3. ソースコー...
この記事では、例を使用して、MySQL で GROUP_CONCAT を使用する方法について説明しま...
私がこれまで携わってきた多くのプロジェクトでは、基本的に避けられない悪循環がありました。それは、ホー...