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

推薦する

NginxはGzipアルゴリズムを使用してメッセージを圧縮します

HTTP圧縮とは場合によっては、比較的大きなメッセージ データがクライアントとサーバー間で送信され、...

デザイン視点技術はデザイン能力の重要な資本である

ある設計士はこう尋ねた。「実際のプロジェクト制作には参加せずに、純粋に設計だけをすることはできますか...

CSS はスクロールバーを非表示にしてコンテンツをスクロールする効果を実現します (3 つの方法)

フロントエンド開発では、スクロールバーを非表示にしながらスクロールをサポートしなければならないという...

アコーディオン効果を実現するJavaScript

この記事では、アコーディオン効果を実現するためのJavaScriptの具体的なコードを参考までに紹介...

UbuntuのVimにNERDTreeプラグインをインストールする詳細な手順

NERDTree は Vim 用のファイル システム ブラウザーです。このプラグインを使用すると、ユ...

Linux システムの busybox に mkfs.vfat コマンドを移植する

オーディオおよびビデオ ファイルを保存するためのディスク寿命を延ばすには、ディスクをフォーマットする...

MySql クライアントが数秒で終了する問題を解決する (my.ini が見つからない)

問題の説明 (環境: windows7、MySql8.0)今日、MySql をインストールした後、M...

私が良いと思うクールなデザインサイトをいくつかまとめてみました。

ウェブサイトをデザインするにはインスピレーションが必要です。良いインスピレーションを得るには、より多...

モバイル開発におけるHTML5開発の現状を深く理解する

「私たちは次の一連のモバイル製品を HTML5 で作成しています。」 「ええ、最近は多くの人が Ap...

バックエンドから返される 100,000 個のデータをフロントエンドでより適切に表示するにはどうすればよいですか?

目次予備作業バックエンド構築フロントエンドページダイレクトレンダリングsetTimeout ページン...

JS における for、for...in、for...of、forEach の違いと使用例

forループ基本的な構文形式: for(変数の初期化; 条件式; 演算式){ループ本体ステートメント...

ウェブページの再設計の7つの主要要素 ウェブページの再設計の7つの主要要素を共有する

Shopify Plus は、私たちが設立した e コマース プラットフォームのエンタープライズ バ...

Vueエンジニアがカプセル化しなければならない埋め込み命令の知識のまとめ

目次序文指導の基本フック機能フック関数のパラメータ文章使い方とアイデア成し遂げる汎用性を高める要約す...

WeChatアプレットは写真の撮影とアルバムからの写真の選択を実現します

この記事では、WeChatアプレットで写真を撮ったり、アルバムから写真を選択したりするための具体的な...

React Diff Principle の詳細な分析

目次差分アルゴリズムレイヤーごとの比較同じタイプのコンポーネントを比較する同じタイプの要素の比較子ノ...