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

推薦する

HTMLでカスタムタグを使用する方法

カスタム タグは XML ファイルと HTML ファイルで自由に使用できますが、いくつか注意すべき点...

Docker を使用した ELK7.3.0 ログ収集サービスの導入に関するベスト プラクティス

最初に書くこの記事では、ELK 7.3.0 の展開についてのみ説明します。展開環境:システムセントO...

シェルスクリプトは、Docker の半自動コンパイル、パッケージ化、およびリリースアプリケーション操作を構築します。

Docker 公開方法は、DevOps (送信、コンパイル、パッケージ化、リリースなどの一連のイベ...

MySQL sql_mode の分析と設定の説明

昨夜、MySQL データベースにデータセットを挿入したときにエラーが発生しました。データベースは容赦...

MySQLインデックスを追加する3つの原則を簡単に理解する

1. インデックスの重要性インデックスは、列に特定の値を持つ行をすばやく見つけるために使用されます。...

Docker可視化ツールPortainerの導入と中国語翻訳

#docker 検索#docker プルポーター1. イメージを取得した後、中国語パッケージをダウン...

MySQL データベースの鉄則 (要約)

適切なデータベース仕様は、ソフトウェア実装の複雑さを軽減し、通信コストを削減するのに役立ちます。この...

MySQL データベースにおける高同時実行性の問題を解決する方法

序文スタートアップ企業が最初はモノリシック アプリケーションを主要なアーキテクチャとして使用し、通常...

新しい要素を作成する3つの方法のまとめ

1つ目: テキスト/HTML経由var txt1="<h1>テキスト。<...

jsは水平および垂直スライダーを実現します

最近、練習プロジェクトをしていたときにスライダーを使う必要があったので、調べてみました。まず、水平ス...

CSS でショートカット プロパティを記述する際は、トラブルの順序に注意してください (落とし穴を避けるため)

ショートハンドプロパティは、複数のプロパティに同時に値を割り当てるために使用されます。たとえば、fo...

MySQL count(1)、count(*)、count(field)の違い

目次1. COUNTの初見2. COUNT(フィールド)、COUNT(定数)、COUNT(*)の違い...

MySQLのトランザクション特性とレベル原則の分析

1. トランザクションとは何ですか?データベース トランザクション (略称: トランザクション) は...

iframe ページで js 関数を呼び出すには js を使用します

最近、私は毎日論文提案に取り組んでいます。自分のスキルを発揮して、再びWebをデザインしたくてうずう...

HTMLの空リンクの役割についての簡単な説明

空のリンク:つまり、ターゲット エンドポイントとのリンクはありません。フォーマット <a hr...