スクリーンスケーリングコンポーネントの実装方法
大画面データ可視化プロジェクトにおいて、多様な解像度環境での表示一貫性を実現するためのVue.jsベースのスケーリングコンポーネントです。デザイン原稿の比率を維持しつつ、実際の画面サイズに自動的に縮小拡大処理します。
主な特徴
- 自動スケーリング:コンテナサイズに応じてコンテンツを自動調整
- 比率保持:元の幅高さ比を維持し、変形を防ぐ
- スケーリングモード:縦横比率維持型とフルフィル型の2モード
- レスポンシブ対応:ウィンドウサイズ変更時に自動再計算
- パフォーマンス最適化:transformプロパティを活用した再描画軽減
インストールと基本設定
npm install screen-scaler
# または
yarn add screen-scaler
import ScreenAdapter from 'screen-scaler'
// グローバル登録
Vue.use(ScreenAdapter)
// コンポーネント内でのローカル登録
export default {
components: {
ScreenAdapter
}
}
基本使用例
<screen-adapter :target-width="3840" :target-height="2160">
<div class="visualization-content">
<!-- データ可視化コンポーネント -->
</div>
</screen-adapter>
設定パラメータ
| パラメータ | 型 | デフォルト | 説明 |
|---|---|---|---|
| target-width | Number | 3840 | デザイン原稿の幅 |
| target-height | Number | 2160 | デザイン原稿の高さ |
| mode | String | 'ratio' | スケーリングモード(ratio/full) |
| recompute-delay | Number | 150 | ウィンドウ変更時の再計算遅延(ms) |
スケーリングモードの詳細
- ratioモード(デフォルト):
- 元の縦横比を維持
- コンテンツを中央に配置
- 余白が発生する可能性あり
- fullモード:
- コンテナを完全に埋める
- 若干の伸縮変形が発生
- 余白なし
高度な使い方
<screen-adapter
:target-width="designW"
:target-height="designH"
@scale-update="updateScaleFactor"
>
<!-- コンテンツ -->
</screen-adapter>
methods: {
updateScaleFactor(scale) {
console.log('現在のスケール:', scale);
// フォントサイズ調整など
}
}
実装上の注意点
- CSS単位:内部要素はpx単位を推奨
- フォントサイズ:スケーリング後の表示がぼやける可能性
- パフォーマンス:複雑なアニメーションは避ける
- ネスト使用:複数階層のネストは非推奨
- サードパーティコンポーネント:スケーリング対応が必要な場合あり
実際の問題解決例
コンテンツが表示されない場合
.dashboard-container {
width: 100vw;
height: 100vh;
overflow: hidden;
}
EChartsとの連携
methods: {
handleScaleUpdate() {
this.$nextTick(() => {
this.chart.resize();
});
}
}
比較検証
| 手法 | メリット | デメリット |
|---|---|---|
| screen-scaler | 設定が簡単、比率維持 | 若干の画質低下 |
| CSS transform | パフォーマンス優秀 | 手動計算が必要 |
| rem/vw | レスポンシブ対応 | コード再構築が必要 |