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

推薦する

HTMLページでよく使われるいくつかの小さなメソッド

<Head>タグに追加する<meta http-equiv="pragm...

一般的なDocker Composeコマンドの詳細な説明

1. Docker Compose の使用方法は docker コマンドの使用方法と非常に似ています...

Dockerを使用してOracle_11gをインストールする方法

DockerでOracle_11gをインストールする1. oracle_11gイメージを取得する d...

CSS3 でテキストマーキーを実装するためのサンプルコード

背景何が起こったかというと、Luzhu は偶然、宇宙で最高の外部スピーカーを備えた携帯電話について知...

APPログインインターフェースシミュレーション要求を実装するためのPostmanデータ暗号化と復号化

目次主に使用されるPostmanの機能データの暗号化と復号化さまざまなパラメータ設定実際に送信された...

Mac OS に MySQL 5.7.20 をインストールするための詳細なグラフィックとテキストの説明

Mac OS X で TAR.GZ から MySQL 5.7 をインストールする MySQL 5.6...

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

1. インストール1. MySQLをダウンロードするダウンロードアドレス: リンクアドレスブラウザで...

MySQL の列から行への変換のヒント (共有)

序文:多くのビジネス テーブルでは、歴史的またはパフォーマンス上の理由により、最初のパラダイムに違反...

MySQL 8.0.22 winx64 のインストールと設定方法のグラフィックチュートリアル

MySQL-8.0.22-winx64のデータベースインストールチュートリアルは参考になります。具体...

Nginx サーバーで URL リンクを設定する方法

LNMPのようなアーキテクチャを持つウェブサイトは、一般的にPHPフレームワークに基づいて開発されて...

トークンの有効期限が切れたときにページを更新するときに繰り返しプロンプトが表示されないようにする Vue について

トークンの有効期限が切れたら、ページを更新します。ページの読み込み時にバックエンドに複数のリクエスト...

Uniapp WeChatアプレット: キー障害の解決策

ユニアプリコード <テンプレート> <表示> <image v-for...

dockerでopenGaussデータベースを構成する方法の詳細な説明

Windowsユーザー向けDocker で openGauss を使用するopenGaussイメージ...

React Fragment の紹介と詳しい使い方

目次序文フラグメントの動機React Fragment の紹介と使用<React.Fragme...