最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

vue中實(shí)現(xiàn)一個項(xiàng)目里兼容移動端和pc端

 更新時間:2022年12月01日 10:00:02   作者:swx980  
這篇文章主要介紹了vue中實(shí)現(xiàn)一個項(xiàng)目里兼容移動端和pc端問題,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教

一個項(xiàng)目里兼容移動端和pc端

話不多說,上代碼

先來看一下我的文件

在這里插入圖片描述

路由文件 index.js:

import Vue from 'vue'
import Router from 'vue-router'

Vue.use(Router)

export default new Router({
  mode:"history",
  routes: [
    // pc端
    {
      path: '/',
      name: 'pc/home',
      component: ()=>import("@/components/pc/home"),
    },
    // 手機(jī)端
    {
      path: '/mobile/home',
      name: 'mobile/home',
      component: ()=>import("@/components/mobile/home"),
    },
  ]
})

在app.vue中

mounted(){
    if (this._isMobile()) {
      // 手機(jī)端
      this.$router.replace("/mobile/home");
    } else {
      // pc端
      this.$router.replace("/");
    }
},
methods:{
 _isMobile() {
      let flag = navigator.userAgent.match(
     /(phone|pad|iPhone|iPod|ios|iPad|Android|Mobile|BlackBerry|IEMobile|MQQBrowser|JUC|Fennec|wOSBrowser|BrowserNG|WebOS|Symbian|Windows phone)/i
      );
      return flag;
    },
}

vue移動端與PC端適配方案viewport+postcss-px-to-viewport

GitHub文檔地址:https://github.com/evrone/postcss-px-to-viewport

GitHub - evrone/postcss-px-to-viewport: A plugin for PostCSS that generates viewport units (vw, vh, vmin, vmax) from pixel units. The best choice to create a scalable interface on different displays by one design size.

優(yōu)點(diǎn)

  • 不需要換算及轉(zhuǎn)換系數(shù)
  • 某些屬性不需要轉(zhuǎn)換為REM、VW等
  • 可以全部使用px單位

lib-flexible 作者推薦,方便好用

什么是viewport     

viewport翻譯成中文的意思大致是視圖、視窗。在移動端設(shè)備中,整塊顯示屏就相當(dāng)于視圖、視窗。但這種說法也并不完全正確。因?yàn)樵谝苿佣嗽O(shè)備中,瀏覽器視圖并不是整個屏幕。因此viewport又被分為了3種 layout viewport(布局視口)、visual viewport(視覺視口)、ideal viewport(理想視口)

為了能夠適配到pc端開發(fā)頁面中,大部分瀏覽器把viewport的寬度設(shè)為了980px 這個瀏覽器默認(rèn)設(shè)置的視圖被稱為 layout viewport。我們可以使用document.documentElement.clientWidth 來獲取。

由于 layout viewport的寬度是遠(yuǎn)大于瀏覽器寬度的,因此我們需要一個新的viewport來代表瀏覽器的可視區(qū)域?qū)挾?,這個視圖則被稱為visual viewport我們可以使用window.innerWidth來獲取。

現(xiàn)在我們已經(jīng)有兩個viewport了,layout viewport 和 visual viewport。但瀏覽器覺得還不夠,因?yàn)楝F(xiàn)在越來越多的網(wǎng)站都會為移動設(shè)備進(jìn)行單獨(dú)的設(shè)計(jì),所以必須還要有一個能完美適配移動設(shè)備的ideal viewport。

ideal viewport 并沒有一個固定的尺寸,不同的設(shè)備擁有不同的 ideal viewport。比如iphone5的 ideal viewport是 320px 而 iphone6s的 ideal viewport卻是 375px

使用方法   

  • 下載插件postcss-px-to-viewport
  • 根目錄下創(chuàng)建配置文件postcss.config.js
  • 添加所需要的配置項(xiàng)
//引入?postcss-px-to-viewport
npm?install?postcss-px-to-viewport?--save-dev?
//postcss.config.js
 
module.exports = {
  plugins: {
    'postcss-px-to-viewport': {
     unitToConvert: "px", // 要轉(zhuǎn)化的單位       
     viewportWidth: 1920, // UI設(shè)計(jì)稿的寬度       
     unitPrecision: 6, // 轉(zhuǎn)換后的精度,即小數(shù)點(diǎn)位數(shù)       
     propList: ["*"], // 指定轉(zhuǎn)換的css屬性的單位,*代表全部css屬性的單位都進(jìn)行轉(zhuǎn)換     
     viewportUnit: "vw", // 指定需要轉(zhuǎn)換成的視窗單位,默認(rèn)vw       
     fontViewportUnit: "vw", // 指定字體需要轉(zhuǎn)換成的視窗單位,默認(rèn)vw      selectorBlackList: ["wrap"], // 指定不轉(zhuǎn)換為視窗單位的類名,       
     minPixelValue: 1, // 默認(rèn)值1,小于或等于1px則不進(jìn)行轉(zhuǎn)換       
     mediaQuery: true, // 是否在媒體查詢的css代碼中也進(jìn)行轉(zhuǎn)換,默認(rèn)false      
     replace: true, // 是否轉(zhuǎn)換后直接更換屬性值       
     exclude: [/node_modules/], // 設(shè)置忽略文件,用正則做目錄名匹配   
     include: undefined, // 如果設(shè)置了include,那將只有匹配到的文件才會被轉(zhuǎn)換
     landscape: false, // 是否添加根據(jù) landscapeWidth 生成的媒體查詢條件 @media (orientation: landscape)
     landscapeUnit: 'vw', // 橫屏?xí)r使用的單位
     landscapeWidth: 1920 // 橫屏?xí)r使用的視口寬度    
    }
  }
}

需要注意的配置: 

  • propList: 當(dāng)有些屬性的單位我們不希望轉(zhuǎn)換的時候,可以添加在數(shù)組后面,并在前面加上!號,如propList: ["*","!letter-spacing"],這表示:所有css屬性的屬性的單位都進(jìn)行轉(zhuǎn)化,除了letter-spacing的
  • selectorBlackList:轉(zhuǎn)換的黑名單,在黑名單里面的我們可以寫入字符串,只要類名包含有這個字符串,就不會被匹配。比如selectorBlackList: ['wrap'],它表示形如wrap,my-wrap,wrapper這樣的類名的單位,都不會被轉(zhuǎn)換

 vant組件庫兼容問題

 vant組件庫的設(shè)計(jì)稿是按照375px來開發(fā)的。因此在viewportWidth750px時會出現(xiàn)轉(zhuǎn)換問題。

// postcss.config.js
const path = require('path');
 
module.exports = ({ webpack }) => {
  const viewWidth = webpack.resourcePath.includes(path.join('node_modules', 'vant')) ? 375 : 750;
//如果讀取的node_modules中的文件是vant,那么就將設(shè)計(jì)稿變?yōu)?75px。如果讀取的文件不是vant的文件,那么就將設(shè)計(jì)稿變?yōu)?50px。這樣就可以避免vant組件在750px下出現(xiàn)樣式縮小的問題了。拼接的原因是Windows和iOS系統(tǒng)的路徑轉(zhuǎn)義符不一樣Windows是“/”,ios是“\”
  return {
    plugins: {
      autoprefixer: {},
      "postcss-px-to-viewport": {
        unitToConvert: "px",
        viewportWidth: viewWidth,
        unitPrecision: 6,
        propList: ["*"],
        viewportUnit: "vw",
        fontViewportUnit: "vw",
        selectorBlackList: [],
        minPixelValue: 1,
        mediaQuery: true,
        exclude: [],
        landscape: false
      }
    }
  }
}

效果圖:

以上為個人經(jīng)驗(yàn),希望能給大家一個參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • vue使用assign巧妙重置data數(shù)據(jù)方式

    vue使用assign巧妙重置data數(shù)據(jù)方式

    這篇文章主要介紹了vue使用assign巧妙重置data數(shù)據(jù)方式,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-03-03
  • 在Vue3中創(chuàng)建和使用自定義指令的實(shí)現(xiàn)方式

    在Vue3中創(chuàng)建和使用自定義指令的實(shí)現(xiàn)方式

    在現(xiàn)代前端開發(fā)中,Vue.js 是一個非常流行的框架,它提供了許多強(qiáng)大的功能來幫助開發(fā)者構(gòu)建高效的用戶界面,自定義指令是 Vue.js 的一個重要特性,它允許開發(fā)者擴(kuò)展 HTML 元素的功能,本文將詳細(xì)介紹如何在 Vue3 中創(chuàng)建和使用自定義指令,并提供示例代碼來幫助理解
    2024-12-12
  • VUE使用echarts?5.0以上版本渲染器未導(dǎo)入錯誤問題

    VUE使用echarts?5.0以上版本渲染器未導(dǎo)入錯誤問題

    這篇文章主要介紹了VUE使用echarts?5.0以上版本渲染器未導(dǎo)入錯誤問題,具有很好的參考價(jià)值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-06-06
  • vue項(xiàng)目優(yōu)化之通過keep-alive數(shù)據(jù)緩存的方法

    vue項(xiàng)目優(yōu)化之通過keep-alive數(shù)據(jù)緩存的方法

    本篇文章主要介紹了vue項(xiàng)目優(yōu)化之通過keep-alive數(shù)據(jù)緩存的方法,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-12-12
  • Vue組織架構(gòu)樹圖組件vue-org-tree的使用解析

    Vue組織架構(gòu)樹圖組件vue-org-tree的使用解析

    這篇文章主要介紹了Vue組織架構(gòu)樹圖組件vue-org-tree的使用解析,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-08-08
  • 對Vue.js之事件的綁定(v-on: 或者 @ )詳解

    對Vue.js之事件的綁定(v-on: 或者 @ )詳解

    今天小編就為大家分享一篇對Vue.js之事件的綁定(v-on: 或者 @ )詳解,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-09-09
  • vue.js的computed,filter,get,set的用法及區(qū)別詳解

    vue.js的computed,filter,get,set的用法及區(qū)別詳解

    下面小編就為大家分享一篇vue.js的computed,filter,get,set的用法及區(qū)別詳解,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-03-03
  • 帶你一步步從零搭建一個Vue項(xiàng)目

    帶你一步步從零搭建一個Vue項(xiàng)目

    Vue.js是現(xiàn)在比較優(yōu)秀的Web前端框架,非常推薦大家入門學(xué)習(xí),這篇文章主要給大家介紹了關(guān)于如何一步步從零搭建一個Vue項(xiàng)目的相關(guān)資料,文中通過圖文以及實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2022-05-05
  • Vue3實(shí)現(xiàn)一個可左右滑動操作組件的示例代碼

    Vue3實(shí)現(xiàn)一個可左右滑動操作組件的示例代碼

    這篇文章主要為大家詳細(xì)介紹了如何利用Vue3實(shí)現(xiàn)一個可左右滑動操作組件,文中的示例代碼講解詳細(xì),對我們學(xué)習(xí)Vue有一定幫助,感興趣的可以學(xué)一下
    2022-11-11
  • element-ui自定義表格如何給input雙向綁定數(shù)據(jù)

    element-ui自定義表格如何給input雙向綁定數(shù)據(jù)

    這篇文章主要介紹了element-ui自定義表格如何給input雙向綁定數(shù)據(jù),具有很好的參考價(jià)值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-10-10

最新評論

台北县| 廉江市| 茌平县| 隆回县| 永靖县| 泰顺县| 曲沃县| 昆山市| 鹤壁市| 吉首市| 镇远县| 绥宁县| 平乐县| 罗甸县| 汽车| 行唐县| 大洼县| 库伦旗| 华宁县| 托克逊县| 三江| 房山区| 垣曲县| 股票| 合江县| 桂平市| 德保县| 铜山县| 于田县| 新龙县| 岑溪市| 武清区| 潮州市| 佛山市| 米泉市| 登封市| 田阳县| 历史| 周口市| 文成县| 蓬安县|