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複合インデックスの詳細な研究

推薦する

JavaScript でピンボール ゲームの Web バージョンを実装する

参考までに、JavaScriptのオブジェクトとメソッドを使用して実装されたWebピンボールゲームを...

CSS でハニカム/六角形アトラスを実装するためのサンプルコード

理由は分かりませんが、UIではハニカム効果(手を広げたような効果)のデザインが好まれます。 1. 六...

Vueカウンターの実装

目次1. カウンターの実装2. 成果を達成する1. カウンターの実装ページにカウンターを実装するだけ...

Linux で Bash コマンド プロンプトをカスタマイズする方法

序文ご存知のとおり、bash (Bourne-Gain Shell) は、ほとんどの Linux デ...

MySQL実践ウィンドウ関数SQL分析クラスの生徒のテストの成績と生活費

目次1. 背景2. テーブル作成ステートメントとデータ挿入テーブルを作成するデータの挿入3. ウィン...

vueの実践的な応用におけるvuexの永続性の詳細な説明

目次vuex 永続性要約するvuex 永続性vuex: ブラウザを更新すると、vuexの状態は初期状...

純粋な CSS3+DIV で小さな三角形の境界線効果を実現するためのサンプル コード

具体的なコードは次のとおりです。 HTMLコードは次のとおりです <div class=&qu...

MySQL データベース シェル import_table データ インポート

目次MySQL Shell import_table データのインポート1. import_tabl...

Linux環境変数の設定に関する完全なガイド

Linux環境変数の設定ソフトウェアのインストールをカスタマイズする場合、多くの場合、環境変数を設定...

Windows 上で Zookeeper サーバーを構築するチュートリアル

インストールと設定Apacheの公式ウェブサイトには多くのミラーダウンロードアドレスが用意されており...

一般的なフロントエンドJavaScriptメソッドのカプセル化

目次1. 値を入力し、そのデータ型を返す** 2. アレイ重複排除3. 文字列の重複排除4. ディー...

フロントエンドページのスライド検証を実装するための JavaScript + HTML

この記事では、フロントエンドページのスライド検証を実装するためのJavaScript + HTMLの...

Fabric.js は DIY ポストカード機能を実装します

この記事では、DIYポストカード機能を実現するためのfabricjsの具体的なコードを参考までに共有...

JavaScript と CSS を最適化してウェブサイトのパフォーマンスを向上させる

<br /> 第 1 部と第 2 部では、Web サイトのパフォーマンス、ページ コンテ...

XHTMLコードの一般的なアプリケーション問題をまとめる

時間が経つにつれて、多くの人が XHTML の使い方を知らないことに気づきました。普通の初心者だけで...