この記事では、適応解像度を実現するためのVue2.0の具体的なコードを参考までに紹介します。具体的な内容は以下のとおりです。 1. フロントエンドフレームワーク: Vue2.0+elementUI 2.15.7 2. 開発ツール: VS Code 3. 必要なラック パッケージをインストールします。
「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 を応援していただければ幸いです。 以下もご興味があるかもしれません:
|
>>: HTML ページに画像を挿入し、マップ インデックスを追加する方法の例
目次1. データベースを操作する1.1 データベースを作成する1.2 データベースをクエリする1.3...
序文前回はLinearLayoutについて説明しました。今回はFrameLayoutの使い方を説明し...
Linux サーバーで作業している場合、ネットワーク カード/イーサネット カードに静的 IP アド...
仮想ホストは、インターネット上で実行されているサーバー ホストを複数の「仮想」ホストに分割する特殊な...
<br />緑は黄色と青(寒色と暖色)の中間の色で、より穏やかな色です。そのため、緑は最...
目次01 MySQLルーターの紹介MySQL Router とは何ですか? 02 MySQLルータの...
1. 概要1.1 基本概念: Docker は、Go 言語をベースにしたオープンソースのアプリケーシ...
目次MySQLをインストールする環境変数の設定MySQLをインストールするmysqlをダウンロードし...
Centos7 の起動プロセス: 1.post(電源投入時のセルフテスト) 電源投入時のセルフテスト...
序文:この知識を理解する必要がある人は、すでにプロセス間通信とスレッド間通信の基本的な理解を持ってい...
問題の説明今日、ページ スタイルを変更していたときに、子要素にmargin-top設定したのに、子要...
コンポーネントが詳細になるにつれて、複数のコンポーネントが状態を共有する状況に遭遇するでしょう。Vu...
docker コンテナを使用する場合、vim がインストールされていないことがあり、vim コマンド...
実際のプロジェクト開発プロセスでは、ページがサーバーにアップロードされます。サーバーへの負荷を軽減し...
概要: Web ページをより美しく見せるために、ここでは CSS3 でよく使用されるスタイルをいくつ...