Vue2.0は適応解像度を実装する

Vue2.0は適応解像度を実装する

この記事では、適応解像度を実現するためのVue2.0の具体的なコードを参考までに紹介します。具体的な内容は以下のとおりです。

1. フロントエンドフレームワーク: Vue2.0+elementUI 2.15.7

2. 開発ツール: VS Code

3. 必要なラック パッケージをインストールします。

"postcss-import": "12.0.1",
"postcss-loader": "4.0.1",
"postcss-pxtorem": "^5.1.1",

「flexible」パッケージがインストールされているかどうかを確認します。インストールされている場合は、アンインストールするか、参照をキャンセルします。パッケージ ファイルは、変更された「flexible」ファイルと競合します。

4. FlexibleEx.js ファイル (このファイルは、必要に応じて変更できるフレキシブル パッケージを変更する Flexible.js ファイルです) を作成し、「/src/utils」ディレクトリの下など、任意の場所に配置します。

次に、次のように「flexibleEx.js」を「main.js」に導入します。

'@/utils/flexibleEx.js' をインポートします

ファイルコード:

(関数(win, lib) {
  var doc = win.document
  var docEl = doc.documentElement
  var metaEl = doc.querySelector('meta[name="viewport"]')
  var フレキシブルEl = doc.querySelector('meta[name="フレキシブル"]')
  var dpr = 0
  varスケール = 0
  var tid
  var フレキシブル = lib.フレキシブル || (lib.フレキシブル = {})
 
  if (メタEl) {
    console.warn('ズーム率は既存のメタタグに従って設定されます')
    var マッチ = metaEl
      .getAttribute('コンテンツ')
      .match(/initial\-scale=([\d\.]+)/)
    (一致)の場合{
      スケール = parseFloat(match[1])
      dpr = parseInt(1 / スケール)
    }
  } そうでない場合 (flexibleEl) {
    var コンテンツ = FlexibleEl.getAttribute('コンテンツ')
    if (コンテンツ) {
      var initialDpr = content.match(/initial\-dpr=([\d\.]+)/)
      var maximumDpr = content.match(/maximum\-dpr=([\d\.]+)/)
      (初期Dpr)の場合{
        dpr = parseFloat(初期Dpr[1])
        スケール = parseFloat((1 / dpr).toFixed(2))
      }
      (最大Dpr)の場合{
        dpr = parseFloat(最大Dpr[1])
        スケール = parseFloat((1 / dpr).toFixed(2))
      }
    }
  }
 
  (!dpr && !スケール){
    var isAndroid = win.navigator.appVersion.match(/android/gi)
    var isIPhone = win.navigator.appVersion.match(/iphone/gi)
    var デバイスピクセル比 = win.デバイスピクセル比
    if (isIPhone) {
      // iOS では、2 画面と 3 画面の場合は 2 倍のソリューションを使用し、それ以外の場合は 1 倍のソリューションを使用します if (devicePixelRatio >= 3 && (!dpr || dpr >= 3)) {
        dpr = 3
      } そうでない場合 (devicePixelRatio >= 2 && (!dpr || dpr >= 2)) {
        dpr = 2
      } それ以外 {
        dpr = 1
      }
    } それ以外 {
      // 他のデバイスでは、1xソリューションが引き続き使用されますdpr = 1
    }
    スケール = 1 / dpr
  }
 
  docEl.setAttribute('data-dpr', dpr)
  if (!metaEl) {
    metaEl = doc.createElement('meta')
    metaEl.setAttribute('名前', 'ビューポート')
    メタEl.setAttribute()
      'コンテンツ'、
      '初期スケール=' +
            スケール +
            ', 最大スケール=' +
            スケール +
            ', 最小スケール=' +
            スケール +
            '、ユーザースケーラブル=いいえ'
    )
    docEl.firstElementChildの場合{
      docEl.firstElementChild.appendChild(metaEl)
    } それ以外 {
      var wrap = doc.createElement('div')
      wrap.appendChild(メタEl)
      doc.write(wrap.innerHTML)
    }
  }
 
  関数refreshRem() {
    定数ホワイトリスト = [
      '/managementKanban',
      '/productionKanban',
      '/コントロールボード',
      '/主要'
    ] // ホワイトリストルートをリダイレクトしない var width = docEl.getBoundingClientRect().width
    var rem = 0
 
    var hrefList = window.location.href.split('/')
    var url = hrefList[hrefList.length - 1]
    var url0 = url.split('?')
    var url終了
    url0.length > 0 の場合 {
      urlEnd = url0[0]
    }
    if (!whiteList.includes('/' + urlEnd)) {
      幅 / dpr <= 1980 && 幅 / dpr > 768 の場合 {
        幅 = 1980 * dpr
        rem = 幅 / 48
      } そうでない場合 (幅 / dpr >= 5760) {
        幅 = 5760 * dpr
        rem = 幅 / 48
      } それ以外 {
        幅 = 540 * dpr
        rem = 幅 / 20
      }
      docEl.style.fontSize = rem + 'px'
      フレキシブル.rem = win.rem = rem
    }
  }
 
  win.addEventListener() 関数は、
    「サイズ変更」、
    関数() {
      クリアタイムアウト(tid)
      tid = setTimeout(リフレッシュ間隔、300)
    },
    間違い
  )
  win.addEventListener() 関数は、
    'DOMNodeInserted'、
    関数() {
      クリアタイムアウト(tid)
      tid = setTimeout(リフレッシュ間隔、50)
    },
    間違い
  )
  win.addEventListener() 関数は、
    'ページ表示',
    関数(e) {
      if (e.persisted) {
        クリアタイムアウト(tid)
        tid = setTimeout(リフレッシュ間隔、300)
      }
    },
    間違い
  )
 
  doc.readyState === '完了'の場合{
    doc.body.style.fontSize = 12 * dpr + 'px'
  } それ以外 {
    doc.addEventListener() 関数は、
      'DOMコンテンツがロードされました'、
      関数(e) {
        doc.body.style.fontSize = 12 * dpr + 'px'
      },
      間違い
    )
  }
 
  リフレッシュRem()
 
  フレキシブル.dpr = win.dpr = dpr
  フレキシブル.refreshRem = リフレッシュRem
  フレキシブル.rem2px = 関数(d) {
    var val = parseFloat(d) * this.rem
    (typeof d === 'string' && d.match(/rem$/))の場合{
      val += 'px'
    }
    戻り値
  }
  フレキシブル.px2rem = 関数(d) {
    var val = parseFloat(d) / this.rem
    if (typeof d === 'string' && d.match(/px$/)) {
      val += 'rem'
    }
    戻り値
  }
})(ウィンドウ、ウィンドウ['lib'] || (ウィンドウ['lib'] = {}))

5. 「build/utitls.js」ファイルを変更し、次のコードを追加します。

関数generateLoaders(loader, loaderOptions) {
    const loaders = options.usePostCSS ? [cssLoader] : [cssLoader];
 
    if (ローダー) {
      ローダー.push({
        ローダー: ローダー + "-loader"、
        オプション: Object.assign({}, loaderOptions, {
          ソースマップ: options.sourceMap
        })
      });
    }
 
    // そのオプションが指定されている場合はCSSを抽出します
    // (本番ビルドの場合)
    if (オプション.抽出) {
      戻り値: ExtractTextPlugin.extract({
        使用: ローダー、
        フォールバック: "vue-style-loader",
        パブリックパス: "../../"
      });
    } それ以外 {
      ["vue-style-loader"].concat(loaders) を返します。
    }
  }

6. ディレクトリ内の「postcssrc.js」を修正する

モジュール.エクスポート = {
    プラグイン: {
        '自動プレフィックス': {
            オーバーライドブラウザリスト: [
                「Android 4.1」、
                「iOS 7.1」、
                「Chrome > 31」、
                'ff > 31',
                「つまり >= 8」
            ]
        },
        'postcss-pxtorem': {
            ルート値: 37.5,
            プロップリスト: ['*']
        }
    }
}

7. 注意:インターフェースの適応問題は解決されましたが、インターフェースの表示にはまだ問題があります。今度は、異常なインターフェースを自分で変更する必要があります。インターフェースの開発には rem を使用し、インライン スタイルは使用しないようにしてください。これらはすべて手動で変更する必要があります。

以上がこの記事の全内容です。皆様の勉強のお役に立てれば幸いです。また、123WORDPRESS.COM を応援していただければ幸いです。

以下もご興味があるかもしれません:
  • Vue で PC 解像度の適応を実装するためのサンプルコード
  • Vue3.0 異なる解像度のコンピュータの適応操作
  • VueはPC解像度適応操作を実装

<<:  CSS3 で複数のカスタムフォントを導入する

>>:  HTML ページに画像を挿入し、マップ インデックスを追加する方法の例

推薦する

初心者向けのMySQLデータベースとテーブルDDLの作成と操作の学習

目次1. データベースを操作する1.1 データベースを作成する1.2 データベースをクエリする1.3...

6つのレイアウトでのFrameLayoutの使用

序文前回はLinearLayoutについて説明しました。今回はFrameLayoutの使い方を説明し...

RHEL8 で静的 IP アドレスを設定するさまざまな方法の簡単な分析

Linux サーバーで作業している場合、ネットワーク カード/イーサネット カードに静的 IP アド...

nginx で仮想ホストを構成するための詳細な手順

仮想ホストは、インターネット上で実行されているサーバー ホストを複数の「仮想」ホストに分割する特殊な...

ウェブページのカラーマッチング例分析: 緑色のカラーマッチングウェブページ分析

<br />緑は黄色と青(寒色と暖色)の中間の色で、より穏やかな色です。そのため、緑は最...

MySQL Routerのインストールと展開

目次01 MySQLルーターの紹介MySQL Router とは何ですか? 02 MySQLルータの...

Dockerコンテナの紹介

1. 概要1.1 基本概念: Docker は、Go 言語をベースにしたオープンソースのアプリケーシ...

Mac に MySQL データベースをインストールし、環境変数を設定するためのグラフィック チュートリアル

目次MySQLをインストールする環境変数の設定MySQLをインストールするmysqlをダウンロードし...

Centos7 の起動プロセスと Systemd での Nginx の起動構成

Centos7 の起動プロセス: 1.post(電源投入時のセルフテスト) 電源投入時のセルフテスト...

Linux のさまざまなロックメカニズムの使用方法と違いについて詳しく説明します

序文:この知識を理解する必要がある人は、すでにプロセス間通信とスレッド間通信の基本的な理解を持ってい...

子要素の margin-top によって親要素が移動する問題の解決方法

問題の説明今日、ページ スタイルを変更していたときに、子要素にmargin-top設定したのに、子要...

Vue ローカルコンポーネントデータ共有 Vue.observable() の使用

コンポーネントが詳細になるにつれて、複数のコンポーネントが状態を共有する状況に遭遇するでしょう。Vu...

dockerコンテナにviコマンドをインストールする簡単な操作

docker コンテナを使用する場合、vim がインストールされていないことがあり、vim コマンド...

ブラウザのCSS、JavaScript、背景画像のキャッシュをクリアする簡単な方法

実際のプロジェクト開発プロセスでは、ページがサーバーにアップロードされます。サーバーへの負荷を軽減し...

CSS3でよく使われるスタイルの詳しい解説[基本的なテキストとフォントのスタイル]

概要: Web ページをより美しく見せるために、ここでは CSS3 でよく使用されるスタイルをいくつ...