Echatsチャートの大画面適応を実装する方法

Echatsチャートの大画面適応を実装する方法

説明する

データと組み合わせたチャートを使用すると、直感的な視覚効果を作成できます。大画面表示は、企業のデータ表示の一般的なシナリオになっています。大画面への適応をどのように実現するかは、解決しなければならない問題です。以下は、CSSのtransform属性とデザインパーセンテージを使用した解決策の1つです。不備があれば、ご指摘ください。

成し遂げる

1. 大画面表示用の背景として、幅 = 100vw、高さ = 100% のコンテナ コンポーネントを準備します。

 <div class="スクリーンアダプタ">
 </div>
 
 .スクリーンアダプタ{
  幅:100vw;
  最小高さ: 100%;
  最大高さ: 100vh;
  オーバーフロー: 非表示;
  背景: #0c1a3c;
}

2. デザイナーが提供する設計図に従って、各領域の割合を計算できます。たとえば、合計サイズが w*h で、アイコン 1 つの幅と高さが w1 * h1 の場合、従来の画像カットを実現できます。このとき、1 → 2 から次のようになります。

<div class="スクリーンアダプタ">
    <div class="content-wrap" :style="style">
      <スロット></スロット>
    </div>
</div>
小道具: {
    w: { // 設計図サイズ幅 type: Number,
      デフォルト: 1600
    },
    h: { // 設計図サイズ高さ type: Number,
      デフォルト: 900
    }
},
データ () {
    戻る {
      スタイル: {
        幅: this.w + 'px',
        高さ: this.h + 'px',
        transform: 'scale(1) translate(-50%, -50%)' // デフォルトではスケーリングなし、垂直および水平の中央揃え}
    }
}
  
.content-wrap {
  変換の原点: 0 0;
  位置: 絶対;
  上位: 50%;
  左: 50%;
}

3. 2 番目のステップに基づいて、大画面の具体的なサイズに応じてスケーリング比率を計算し、スケーリング比率を設定する必要があります。サイズ変更イベントをバインドするときには、揺れを防ぐことを忘れないようにし、ページが破棄されたときにリスニングイベントを削除することを忘れないでください。

マウントされた(){
    this.setScale()
    this.onresize = this.debounce(() => this.setScale(), 100)
    window.addEventListener('resize', this.onresize)
},
破棄前() {
    window.removeEventListener('resize', this.onresize)
},
 メソッド: {
    // デバウンス (fn, t) {
      定数遅延 = t || 500
      タイマーを鳴らす
      関数を返す(){
        const args = 引数
        if (タイマー) {
          タイムアウトをクリア(タイマー)
        }
        const コンテキスト = this
        タイマー = setTimeout(() => {
          タイマー = null
          fn.apply(コンテキスト、引数)
        }、 遅れ)
      }
    },
    // スケーリング比率を取得する getScale () {
      定数 w = window.innerWidth / this.w
      定数 h = window.innerHeight / this.h
      w < h ? w : h を返す
    },
    // スケーリング比率を設定する setScale () {
      this.style.transform = `scale(${this.getScale()}) translate(-50%, -50%)`
    }
  }

4. この時点で、全体的な構造が完成しました。アイコン コンポーネントの各部分の復元された設計図を前のスロットに配置するだけです。アイコン コンポーネントの各部分のサイズは、設計によって提供されるパーセンテージに基づいて決定できます。すべてのコードは、おおよそ次のようになります。

// スクリーンアダプタ.vue
<テンプレート>
  <div class="スクリーンアダプタ">
    <div class="content-wrap" :style="style">
      <スロット></スロット>
    </div>
  </div>
</テンプレート>
<スクリプト>
エクスポートデフォルト{
  小道具: {
    w: {
      タイプ: 数値、
      デフォルト: 1600
    },
    時間: {
      タイプ: 数値、
      デフォルト: 900
    }
  },
  データ () {
    戻る {
      スタイル: {
        幅: this.w + 'px',
        高さ: this.h + 'px',
        変換: 'スケール(1) 変換(-50%, -50%)'
      }
    }
  },
  マウントされた(){
    this.setScale()
    this.onresize = this.Debounce(() => this.setScale(), 100)
    window.addEventListener('resize', this.onresize)
  },
  破棄前() {
    window.removeEventListener('resize', this.onresize)
  },
  メソッド: {
    デバウンス (fn, t) {
      定数遅延 = t || 500
      タイマーを鳴らす
      関数を返す(){
        const args = 引数
        if (タイマー) {
          タイムアウトをクリア(タイマー)
        }
        const コンテキスト = this
        タイマー = setTimeout(() => {
          タイマー = null
          fn.apply(コンテキスト、引数)
        }、 遅れ)
      }
    },
    スケールを取得する() {
      定数 w = window.innerWidth / this.w
      定数 h = window.innerHeight / this.h
      w < h ? w : h を返す
    },
    スケールを設定する() {
      this.style.transform = `scale(${this.getScale()}) translate(-50%, -50%)`
    }
  }
}
</スクリプト>
<スタイル>
.スクリーンアダプタ{
  幅: 100%;
  最小高さ: 100vh;
  最大高さ: 100vh;
  オーバーフロー: 非表示;
  背景: #0c1a3c;
}
.content-wrap {
  変換の原点: 0 0;
  位置: 絶対;
  上位: 50%;
  左: 50%;
}
</スタイル>

プロジェクトのディレクトリ構造は次のとおりです。

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

フォントチャートはすべて比例して拡大縮小されていることがわかります

要約する

大画面での Echats チャートの適応型実装に関するこの記事はこれで終わりです。大画面での適応型 Echats チャートの関連コンテンツの詳細については、123WORDPRESS.COM の以前の記事を検索するか、以下の関連記事を引き続き参照してください。今後とも 123WORDPRESS.COM をよろしくお願いいたします。

<<:  Dockerパッケージイメージの実装と構成の変更

>>:  MySQL複合インデックスの詳細な研究

推薦する

LinuxサーバーでRabbitMQ管理ページにアクセスできない問題を解決

私のプロジェクトの特定の機能ではサーバーが rabbitmq にメッセージを送信する必要があるため、...

JavaScriptの信頼性の低い未定義

undefined JavaScript では、値が undefined かどうかを判断したい場合は...

シンプルな CSS テキストアニメーション効果

成果を達成する 実装コードhtml <div id=コンテナ> いらっしゃいませ <...

Vueプロジェクトはログインと登録の効果を実現します

この記事の例では、ログインと登録の効果を実現するためのvueプロジェクトの具体的なコードを共有してい...

Unicode における CJK (中国語、日本語、韓国語の統合表意文字) 文字の概要

CJK は CJK Unified Ideographs の略称で、「中国語、日本語、韓国語の統一表...

CentOS 6.9 で glibc ダイナミック ライブラリをアップグレードする詳細なプロセス

glibc は、gnu によってリリースされた libc ライブラリ、つまり c ランタイム ライブ...

Dockerはコンテナ外のコンテナ内でコマンドを実行します

コンテナ内でコマンドを実行したいが、コンテナに入りたくない場合があります。ではどうすればいいでしょう...

Vueページジャンプの実装方法

1. this.$router.push() 1. ビュー <テンプレート> <d...

Tomcat が localhost に通常アクセスすると 404 を報告する問題の解決方法

今日、プロジェクトのホームページにアクセスするために Tomcat を設定していたところ、404 エ...

MySQL が「operate_time」エラーのデフォルト値が無効であると報告する問題を解決する

データベースでcreate tableステートメントを実行する テーブル `sys_acl` を作成...

Web スライスとは何ですか?

IE8 の新機能 Web スライス (Web スライス) Microsoft は 3 月 20 日...

mysqlサーバーは--skip-grant-tablesオプションで実行されています

MySQLサーバーは--skip-grant-tablesオプションで実行されているため、このステー...

MySQL 5.7 のスロークエリログの時間がシステム時間より 8 時間遅れている理由の詳細な説明

遅いクエリをチェックすると、時間が正しくなく、システム時間とちょうど 8 時間異なっていることがわか...

LeetCode の SQL 実装 (177. 給与が N 番目に高い)

[LeetCode] 177. 最も高い給与従業員テーブルからn番目に高い給与を取得する SQL ...

MySql ファジークエリ JSON キーワード取得ソリューションの例

目次序文オプション1:オプション2:オプション3:オプション4(最終的に採用されたオプション):要約...