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

推薦する

2 つの Linux サーバー間の自動ファイル同期

サーバーB(172.17.166.11)の電源がオンまたは再起動されると、サーバーA(172.17....

mybatis-plusページングパラメータが渡された後、SQLのwhere条件にはページング情報操作の制限がありません

2時間近くかけて、さまざまな方法を試しました。後で、whereでフィルタリングした後のデータ量が1ペ...

CSS3で実装されたサムネイルホバー効果

成果を達成する実装コードhtml <ヘッダー> <h1><em>...

MySQLでよく使われる文字列関数トップ10の詳細な説明

こんにちは、みんな!技術の話ばかりで髪は切らないトニーです。データベース関数は、何らかの機能を持ち、...

Ubuntu 20.04でLNMP環境を構築する方法

簡単な説明以前 Centos7 で構築し、その後個人開発環境として Ubuntu 20.04 を使っ...

CocosCreatorでシューティングゲームを作る詳しい解説

目次シーン設定ゲームリソース砲塔の回転動的に生成された弾丸衝突計算効果を高めるターゲットの動き弾薬庫...

Javascript Bootstrapのグリッドシステム、ナビゲーションバー、カルーセルの詳細な説明

目次ブートストラップと関連コンテンツの紹介グリッドシステムネストされた列列オフセット列の並べ替えナビ...

4つの柔軟なScssコンパイル出力スタイル

多くの人は、Scss を使用する瞬間からコンパイル方法を説明されてきました。したがって、コマンドのコ...

mysql 5.7.18 winx64 無料インストール設定方法

1. ダウンロード2. 減圧3. パス環境変数を追加し、mysqlが配置されているbinディレクトリ...

Navicat の MySQL へのリモート接続の実装手順の分析

序文皆さんはリモート サーバーで開発を行っており、MySQL の使用率はかなり高いはずです。コマンド...

Linux における SUID、SGID、SBIT の素晴らしい使い方の詳細な説明

序文Linux のファイル権限管理はとにかく素晴らしいです。SUID、SGID、SBIT の機能を確...

Celery と Docker を使用して Django で定期的なタスクを処理する方法

Django アプリケーションを構築して拡張していくと、必然的に特定のタスクをバックグラウンドで自動...

HTMLの基本概念の詳細な説明

HTMLとは何ですか? HTML は Web ページを記述するために使用される言語です。 •HTML...

Linux ログ内のキーワードとその前後の情報を検索する方法の例

日常業務では、ログを表示する必要がよくあります。たとえば、 tail コマンドを使用してログをリアル...

Vue+Openlayerはグラフィックスのドラッグと回転変形効果を実現します

目次序文関連資料成果を達成する実装手順序文Openlayer には独自の拡張プラグイン ol-ext...