WeChatアプレットはキャンバスを使用して時計を描画します

WeChatアプレットはキャンバスを使用して時計を描画します

この記事では、キャンバスを使用してWeChatアプレットに時計を描く具体的なコードを参考までに共有します。具体的な内容は次のとおりです。

アナログ時計

キャンバスを使用して時計を描き、アナログ時計の機能を実現します。時計の時間はシステム時間と一致します。目盛りは 24 時間制を 12 時間制に変換します。中心円、外円、分針、時針、秒針を個別に描く必要があります。

効果図は以下のとおりです。

コードは次のとおりです。

インデックス.wxml

<キャンバス キャンバス ID ="myCanvas" クラス="mycanvas"></キャンバス>

インデックス.wxss

/**index.wxss**/
.mycanvas {
  幅: 100%;
  高さ: 100%;
  位置: 固定;
}

インデックス

ページ({
  width: 0, //ウィンドウの幅 height: 0, //ウィンドウの高さ onLoad: function () {
    // システム情報を取得する wx.getSystemInfo({
      // システム情報を正常に取得し、取得したシステムウィンドウの幅と高さを保存します。成功: res => {
        // コンソール.log(res)
        this.width = res.windowWidth
        this.height = res.windowHeight
        }
      })
    },
  タイマー: null、//タイマー onReady: function(){
    //ctxインスタンスを作成する var ctx = wx.createCanvasContext('myCanvas')
    //後で使用するために角度をラジアンに変換します //計算式: ラジアン = 角度*Math.PI / 180
    定数D6 = 6 * Math.PI / 180
     定数D30 = 30 * Math.PI / 180
     定数 D90 = 90 * Math.PI / 180
     // 幅と高さの値を取得します var width = this.width, height = this.height
     // ダイヤルの半径を計算し、30px の余白を残す var radius = width / 2 -30
     // 1 秒ごとに 1 回描画する draw()
     this.timer = setInterval(描画、1000)
     //描画関数 function draw(){
       // 軸の原点をウィンドウの中心に設定します ctx.translate(width / 2, height / 2)
       // ダイヤルを描画する drawClock(ctx,radius)
       // ポインタを描画する drawHand(ctx, radius)
       //描画を実行する ctx.draw()
   }
  
    // ダイヤルを描画する function drawClock(ctx, radius){
      // 大きな円を描く // 大きな円の半径は radius で、線の太さは 2px です
      ctx.setLineWidth(2) //線の太さを設定 ctx.beginPath() //新しいパスを開始 ctx.arc(0, 0, radius, 0, 2 * Math.PI, true)
      ctx.stroke() //線を描く //同心円を描く //中心の円の半径は8px、線の太さは1px
      ctx.setLineWidth(1) //線の太さを設定 ctx.beginPath() //新しいパスを開始 ctx.arc(0, 0, 8, 0, 2 * Math.PI, true)
      ctx.stroke() //線を描く // 線の太さ5pxの大きなダイヤルを描く
      ctx.setLineWidth(5)
      (var i = 0; i < 12; ++i){
        // 原点を中心に時計回りに回転します(複数回呼び出すと回転角度が重ね合わされます)
        // 大きな文字盤は 12 時間を表す 12 本の線を描き、そのたびに 30 度回転します ctx.rotate(D30) // 360 / 12 = 30
        ctx.beginPath()
        ctx.moveTo(半径, 0)
        ctx.moveTo(radius - 15, 0) // 大きいスケールの長さ 15px
        ctx.ストローク()
      }
      // 線の太さが 1px の小さなダイヤルを描画します
      ctx.setLineWidth(1)
      (var i = 0; i < 60; ++i){
        // 小さなダイヤルは 60 分または 60 秒を表す 60 本の線を描画する必要があり、そのたびに 6 度回転します ctx.rotate(D6)
        ctx.beginPath()
        ctx.moveTo(半径, 0)
        ctx.lineTo(radius - 10, 0) // 小さいダイヤルの長さ 10px
        ctx.ストローク()
      }
      //テキストを描画 ctx.setFontSize(20) //フォントサイズ ctx.textBaseline = 'middle' //テキストを垂直中央に配置する //ダイヤルの中心からテキストの半径rを計算する
      var r = 半径 - 30
      (変数 i = 1; i <= 12; ++i){
        // 三角関数を使用してテキスト座標を計算します var x = r * Math.cos(D30 * i - D90)
        var y = r * Math.sin(D30 * i - D90)
        if(i > 10){ // 11と12の位置を調整する // キャンバスにテキストを描画する fillText(text, 左上隅のx座標, 左上隅のy座標)
          ctx.fillText(i, x - 12, y)
        } それ以外 {
          ctx.fillText(i, x-6, y)
        }
      }
    }
    //ポインタを描画する function drawHand(ctx, radius){
      var t = new Date() // 現在の時刻を取得します var h = t.getHours() // 時間 var m = t.getMinutes() // 分 var s = t.getSeconds() // 秒 h = h > 12 ? h -12 :h // 24 時間制を 12 時間制に変換します // 時刻は 3 時から始まり、反時計回りに 90 度回転して 12 時を指します ctx.rotate(-D90)
      // 時針を描画します ctx.save() // 回転状態を記録します // 時針が指すスケールを計算します // 30 度 * h を使用して、各時間の回転角度を計算できます // 時間が 1 時間でない場合は、h + m / 60 + s / 3600 を使用して正確なオフセットを計算する必要があります ctx.rotate(D30 * (h + m / 60 + s / 3600))
      ctx.setLineWidth(6)
      ctx.beginPath()
      ctx.moveTo(-20, 0)
      ctx.lineTo(半径 / 2.6, 0)
      ctx.ストローク()
      ctx.復元()
      // 分針を描画する ctx.save()
      ctx.rotate(D6 * (m + s / 60))
      ctx.setLineWidth(4)
      ctx.beginPath()
      ctx.moveTo(-20, 0)
      ctx.lineTo(半径 / 1.8, 0)
      ctx.ストローク()
      ctx.復元()
      //秒針を描く ctx.save()
      ctx.rotate(D6 * s)
      ctx.setLineWidth(2)
      ctx.beginPath()
      ctx.moveTo(-20, 0)
      ctx.lineTo(半径 / 1.6, 0)
      ctx.ストローク()
      ctx.復元() 
    } 
  }
})

以上がこの記事の全内容です。皆様の勉強のお役に立てれば幸いです。また、123WORDPRESS.COM を応援していただければ幸いです。

以下もご興味があるかもしれません:
  • WeChat ミニプログラム キャンバス ダイナミック クロック
  • WeChatミニプログラムの紹介:時計を描く
  • JS が WeChat アプレットのキャンバス時計を描画します

<<:  Docker でタイムゾーンの問題に対処する方法

>>:  MySQLのロック機構の詳細な説明

推薦する

Windows で IP アドレスを指定してサーバーへのリモート アクセスを設定する方法

当社には、外部ネットワークからの干渉を受けることが多いサーバーが多数あります。侵入者はポート 338...

Alpine Dockerイメージフォント問題解決操作

1. フォントを実行し、フォント フォルダーを開いて、使用するフォント ファイルを見つけます。 2....

この記事では、VUE の複数の DIV とボタン バインディングの Enter イベントを実装する方法を説明します。

現在、OK ボタンをクリックしたときやキーボードの Enter キーを押したときに操作を実行するとい...

Docker 構成 Alibaba Cloud イメージアクセラレーション プル実装

今日はdockerを使ってイメージをpullしたのですが、速度が悪くて見れず最後まで待ち続けました。...

JavaScript のショートカットのヒント

目次1. 配列を結合する2. 配列をマージする(最初に) 3. 配列の複製4. 構造化分解割り当て5...

JavaScript でオブジェクトをエレガントに扱う 6 つの方法

目次序文1. オブジェクト.freeze() 2. オブジェクト.seal() 3. オブジェクト....

Docker Consul の概要とクラスター環境構築手順(グラフィカルな説明)

目次1. Dockerコンサルの概要2. nginxとconsulをベースにした自動検出と高可用性の...

MySQLのストレージエンジンについてお話しましょう

基礎リレーショナル データベースでは、各データ テーブルはファイルに相当し、異なるストレージ エンジ...

MySQL 8.0 オンライン DDL クイック列追加の概要

目次問題の説明MySQLオンラインDDLで列を追加する従来の方法01 コピー方法02 インプレースメ...

Vue の element-ui コンポーネントのデフォルトの CSS スタイルを変更する 4 つの方法

目次序文1. グローバル統合オーバーライドを使用する2. .vueファイルを変更する3. コンポーネ...

Ubuntuのソースリスト(ソースリスト)を変更する方法詳細説明

導入Ubuntu のデフォルトのソースは国内サーバーではないため、更新されたソフトウェアのダウンロー...

W3Cチュートリアル(16):その他のW3Cの活動

このセクションでは、その他の重要かつ興味深い W3C アクティビティの概要を説明します。このセクショ...

虫眼鏡コンポーネントのネイティブ js 実装

この記事の例では、参考までに虫眼鏡コンポーネントを開発するためのjsの具体的なコードを共有しています...

Vue-Element-Adminはログインジャンプを実現するために独自のインターフェースを統合しています

1. まずリクエスト設定ファイルを見て、axios.createメソッドを見てください。baseUR...

MySQLテーブル内の重複データをクエリする方法

hk_test(ユーザー名、パスワード) に値を挿入 ('qmf1', '...