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 ページに画像を挿入し、マップ インデックスを追加する方法の例

推薦する

Vueはタブルーティング切り替えコンポーネントのメソッド例を実装します

序文この記事では、vue に付属している vue-router.js ルーティングを使用してページン...

iFrameは背景を覆うポップアップレイヤーとして使うのに最適です

最近、私は「ぶどうコレクション」というプロジェクトに取り組んでいます。簡単に言うと、Budou ペー...

HTML Webページの例を使用してヘッドエリアコードの意味を説明する

例を使って、Webページのヘッダー情報の意味を理解しましょう。 <!DOCTYPE HTML ...

SQL グループ化により重複を削除し、他のフィールドで並べ替える

必要:あるフィールドの同一項目を結合し、別の時間フィールドで並べ替えます。例:初めに テーブルから都...

js を使用して年カルーセル選択効果をネイティブに実装する例

序文js を使用して、年の回転選択効果を実現します。では早速、写真を見てみましょう。 1. アイデア...

Ubuntu 20.04 ファイアウォール設定の簡単なチュートリアル (初心者)

序文ますます便利になった今日のインターネット社会では、さまざまなインターネット ランサムウェア ウイ...

CentOS7 ファイアウォールとオープンポートの簡単な使い方の簡単な紹介

概要(公式にはより詳しい説明があります) Firewalld は、ネットワーク接続またはインターフェ...

インタビュアーはCSSで固定アスペクト比を実現する方法を尋ねました

この質問に関連するニーズはまだないかもしれませんし、面接でこの質問をされたことがないかもしれませんが...

JavaScript配列の一般的なメソッドの例のまとめ

目次一般的な配列メソッドconcat() メソッドjoin() メソッドpop() メソッドpush...

MySQL は information_schema オブジェクトの付与をバイパスし、ERROR 1044 (4200) エラーを報告します

この質問は、MySQL の権限に関する WeChat グループのネットユーザー間の議論です。次のよう...

HTML テーブルのオーバーフローの解決方法

テーブルが広い場合は、あふれてしまう可能性があります。たとえば、左と右の 2 つの div がありま...

offsetWidth、clientWidth、scrollWidth、scrollTop、scrollLeft などのプロパティの図。

注 1: 上の画像の背景全体がこの Web ページのフルサイズであり、中央の小さなボックスがブラウザ...

MySQL MGR 構築時の一般的な問題と解決策

目次01 よくある故障 1 02 よくある欠陥 2 03 よくある欠陥 3 04 よくある欠陥 4 ...

nginx を使用して同じドメイン名で複数の Vue プロジェクトをデプロイし、リバース プロキシを使用する方法

効果現在、プロジェクトは2つ(project1、project2)あり、nginxに付属するinde...

Linuxでmysqlの定期的なコールドバックアップを実装するためにmysqldump+expect+crontabを使用するアイデアの詳細な説明

目次1. 遭遇した問題2. アイデア3. コード1. 遭遇した問題私たちは皆、mysqldump を...