vue+canvasでタイムラインを描く方法

vue+canvasでタイムラインを描く方法

この記事では、参考までにvueキャンバスのタイムライン描画の具体的なコードを紹介します。具体的な内容は次のとおりです。

最近、キャンバス描画タイムラインを勉強しています。ここに直接コードがあります。共有することでお役に立てれば幸いです。効果は次のとおりです。

コードは以下のとおりです。これをvueプロジェクトにコピーして直接プレビューすることができます。

<テンプレート>
  <div>
    <canvas id="time_line" width="1200" height="27"></canvas>
  </div>
</テンプレート>

<スクリプト>
エクスポートデフォルト{
  名前: 'pathwaytrack',
  データ() {
    戻る {
      画面幅: document.body.clientWidth
    }
  },
  マウント() {
    それを = これとする
    that.carveTimeScale(1200, 1, 10, 0, 10)
    キャンバスカラーを '#999999' にします
    initTime = 12000 とします
    間隔を設定する(() => {
      初期化時間 += 1000
      that.carveTimeScale(1200, 1, 10, initTime, 10)
    }, 1000);
  },
  メソッド: {
    /**
     * 分割ピクセルスケール* width: 幅 (ミリ秒): 小さいスケールの場合はミリ秒数 pxMs: 小さいスケールの場合は 10 ピクセル pageShowStartTime: 初期時間 (ミリ秒) 大きい間隔の継続時間 (秒)
     */
    carveTimeScale(幅、ミリ秒、ピクセル数、ページ表示開始時間、間隔時間) {
      canvasId = document.getElementById('time_line') とします。
      ctx = canvasId.getContext('2d') とします。
      ctx.clearRect(0, 0, 1200, 60)
      ctx.fillStyle = '#999999'
      // Apple 2X 画面で異常な表示を防ぐため // Apple 2X 画面で異常な表示を防ぐため var getPixelRatio = function (context) {
        var backingStore = context.backingStorePixelRatio ||
          context.webkitBackingStorePixelRatio ||
          context.mozBackingStorePixelRatio ||
          コンテキスト.msBackingStorePixelRatio ||
          コンテキスト.oBackingStorePixelRatio ||
          コンテキスト.backingStoreピクセル比 || 1
        戻り値 (window.devicePixelRatio || 1) / backingStore
      }
      比率 = getPixelRatio(ctx) とします。
      let msOffset = this.startOffsetTime(pageShowStartTime, ms) // 開始オフセット時間 ms
      let pxOffset = msOffset / 1000 * pxMs // 開始オフセット距離 px
      let leftDistance = 0 // 左への距離 let leftDistanceTime = 0 // 左への時間 let beginX = 0
      beginY = 0 とする
      (i = 0 とします; i < 幅 / (ms * pxMs); i++) {
        leftDistance = pxOffset + i * (ms * pxMs) // 距離 = 開始オフセット距離 + グリッド数 * px/グリッド leftDistanceTime = pageShowStartTime + msOffset + i * ms // 時間 = 左開始時間 + オフセット時間 + グリッド数 * ms
        beginX = pxOffset + i * (ms * pxMs)
        キャンバスカラー
        showTime = pageShowStartTime + beginX / pxMs * 1000 とします。
        表示時間% (間隔時間 * 1000) === 0の場合
          開始Y = 0
          ctx.font = '12px Arial'
          ctx.fillText(this.changeTime(showTime, 1), beginX + 10, 22)
          キャンバスカラー = '#999999'
          ctx.fillStyle = '#B1B1B1'
          this.drawLine(左距離、開始Y、左距離、20、キャンバスカラー、1)
        } そうでない場合 (showTime % intervalTime == 0) {
          開始Y = 0
          キャンバスカラー = '#999999'
          this.drawLine(左距離、開始Y、左距離、10、キャンバスカラー、1)
        }
      }
    },
    /**
     * 渡されたパラメータに従って線を描画します */
    描画線(開始X、開始Y、終了X、終了Y、色、幅) {
      canvasId を document.getElementById('time_line') に設定します。
      ctx = canvasId.getContext('2d') とします。
      ctx.beginPath();
      ctx.moveTo(開始X、開始Y);
      ctx.lineTo(終了X、終了Y);
      ctx.strokeStyle = 色;
      ctx.lineWidth = 幅;
      ctx.stroke();
    },
    /**
     * 左開始時間のオフセット(ミリ秒単位で返されます)
     */
    startOffsetTime(タイムスタンプ, ステップ) {
      残り = タイムスタンプ % ステップ
      残りを返す?ステップ - 残り: 0
    },
    /**
     * 帰りの時間 */
    changeTime(時間, 数値) {
      時間 = 0 とする
      分を 0 にする
      秒を 0 にする
      秒 = 時間 / 1000
      (秒 >= 3600)の場合{
        分 = (秒 - (秒 % 60)) / 60
        時間 = parseInt((分 / 60).toString())
        分 = 分 % 60
        /* eslint を無効にする */
        時間 >= 10 ? 時間 : 時間 = '0' + 時間
        分 >= 10 ? 分 : 分 = '0' + 分
        秒 = 秒 % 60
        秒 >= 10 ? 秒 : 秒 = '0' + 秒
        /* eslint を有効にする */
        時間 + ':' + 分 + ':' + 秒を返す
      }
      (秒<3600 &&秒>=60)の場合{
        時間 = '00'
        分 = parseInt((秒 / 60).toString())
        /* eslint を無効にする */
        分 >= 10 ? 分 : 分 = '0' + 分
        秒 = 秒 % 60
        秒 >= 10 ? 秒 : 秒 = '0' + 秒
        /* eslint を有効にする */
        時間 + ':' + 分 + ':' + 秒を返す
      }
      (秒数<60)の場合{
        時間 = '00'
        分 = '00'
        秒 = parseInt(秒)
        /* eslint を無効にする */
        秒 >= 10 ? 秒 : 秒 = '0' + 秒
        /* eslint を有効にする */
        時間 + ':' + 分 + ':' + 秒を返す
      }
    }
  }
}
</スクリプト>

<style lang="less" スコープ>
  キャンバス {
    背景:黒;
  }
</スタイル>

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

以下もご興味があるかもしれません:
  • Vueは水平タイムラインを実装する
  • Vueはタイムライン機能を実装する
  • 2列の水平タイムラインを実装するためのVueサンプルコード
  • VUEはタイムライン再生コンポーネントを実装します
  • Vue.jsはタイムライン機能を実装します
  • Vue+swiperでタイムライン効果を実現
  • Vueは物流タイムライン効果を実現します
  • Vue タイムライン vue-light-timeline 使用方法
  • Vueは移動可能な水平タイムラインを実装します
  • Vueはタイムライン効果を実装する

<<:  SQL 面接の質問: 時間差の合計を求める (重複は無視)

>>:  CentOS8でルートパスワードを素早く変更する方法

推薦する

JavaScriptにおけるこのポインティング問題の詳細な説明

序文信じてください。この記事の 7️⃣ ステップを覚えておけば、JS の this リファレンスを完...

MySQL のストアド プロシージャを使用して 100 万件のレコードをすばやく生成する方法

序文テストを行う際、大量のデータによる負荷に耐えるプロジェクトの能力をテストするために、通常はテスト...

HTMLページ埋め込み動画とJSコントロール切り替え動画例の詳しい説明

まず、ページにビデオを埋め込むための HTML コードは次のとおりです。コードをコピーコードは次のと...

WeChatアプレットにおけるデータ保存実装方法

目次グローバル変数 globalDataページプライベート変数データストレージ非同期ストレージ(デバ...

ローカルのMySQLをサーバーデータベースに移行する方法

Linux の scp コマンド (Windows では scp は使用できません) と、mysql...

ウェブ開発者はIE7とIE8の共存を懸念している

今日、IE8 をインストールしました。ダウンロードするために Microsoft の Web サイト...

Ubuntuでネットワークルーティングテーブルを表示する方法

Linux におけるルーティングとルーティング テーブルとは何ですか?ルーティングのプロセスとは、ネ...

MySQL 5.7.25 圧縮版のインストールと設定方法のグラフィックチュートリアル

この記事では、MySQL 5.7.25圧縮版のインストールと設定方法を参考までに紹介します。具体的な...

MySQL スケジュールタスクの実装と使用例

この記事では、例を使用して、MySQL スケジュール タスクの実装と使用方法を説明します。ご参考まで...

Linux 7.6 バイナリに MySQL 8.0.27 をインストールする詳細な手順

目次1. 環境整備1.1 オペレーティング システムのバージョン1.2 ディスク容量1.3 ファイア...

jsでシンプルなパズルゲームを実現する

この記事では、簡単なパズルゲームを実装するためのjsの具体的なコードを参考までに共有します。具体的な...

1つの記事でTypeScriptのデータ型について学ぶ

目次基本タイプあらゆるタイプ配列タプルインタフェース関数自己推論を入力する結合タイプ(1つ以上選択)...

JSON.stringify のさまざまな用途のまとめ

序文json を使用したことがある人なら、オブジェクトを文字列化してからバックエンドに送信するのが一...

データベースのインデックス作成に関する知識ポイントのまとめ。必要な情報はすべてここにあります。

データベースインデックスについては皆さんもよくご存知だと思います。 インデックスは、データベース テ...

MySQL でテーブルデータをクリアする 2 つの方法とその違い

MySQL でデータを削除するには 2 つの方法があります。切り詰めは大まかな伐採の一種である削除は...