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でルートパスワードを素早く変更する方法

推薦する

MySql でリモート接続を許可する方法

MySql でリモート接続を許可する方法この目標を達成するには、2つのことを行う必要がある。ユーザー...

MySQL での replace と replace into の使い方の説明

MySQL の replace と replace into はどちらも頻繁に使用される関数です。r...

MySQL pt-slave-restart ツールの使い方の紹介

目次MySQL マスター スレーブ レプリケーション環境を設定する場合、マスター データベースとスレ...

Webデザインチュートリアル(3):デザインの手順と考え方

<br />前のチュートリアル:Webデザインチュートリアル(2):模倣と盗作について。...

Bootstrap 3.0 学習ノート グリッドシステムの原則

前の 2 つの記事の簡単な紹介を通じて、Bootstrap についての基礎的な理解が得られました。 ...

Linux で静的ルーティングを追加するための 2 つの実装方法の分析

ルートを追加するコマンド: 1.ルート追加route add -net 192.56.76.0 ne...

Docker イメージのエクスポート、インポート、コピーの例の分析

最初の解決策は、イメージを公開イメージリポジトリにプッシュし、それをプルダウンすることです。 2 番...

Eclipseを使用してMySQLデータベースに接続する方法を説明します

序文常にエラーが発生するため、MySQL データベースに接続するプロセスを記録します。接続プロセス1...

mysql 5.7.11 winx64 初期パスワード変更

公式サイトからMySQL-5.7.11-winx64の圧縮版をダウンロード。インストール後、パスワー...

Vueは動的クエリルール生成コンポーネントを実装します

1. 動的クエリルール動的クエリルールは、おおよそ次の図のようになります。ユーザのカスタマイズに応じ...

CSSのマッチング問題を解決する

問題の説明ご存知のとおり、CSS を記述する場合、HTML のクラスの定義または ID の定義に従っ...

Linux 上でプライベート Git サーバーを構築するための詳細なチュートリアル

1. サーバーのセットアップリモート リポジトリは実際にはローカル リポジトリと何ら変わりなく、純粋...

HTML で入力ボックスに純粋な数字のみを入力するように制限する方法

inputボックスを純粋な数字のみに制限する1、onkeyup = "value=valu...

JavaScript を使用してページに動的な検証コードを実装する例

導入:現在、プログラム攻撃を防ぐために、ユーザーがログインまたは登録するときに多くの動的検証テクノロ...

フロントエンドJavaScriptの約束

目次1. Promiseとは何か2. 基本的な使い方3. Promiseメソッド3.1 Promis...