vue项目适配大屏端的方法示例

众所周知在vue移动端h5页面当中,适配是经常会遇到的问题,这篇文章主要给大家介绍了关于vue项目适配大屏端的相关资料,需要的朋友可以参考下

vue项目适配大屏端的方法示例,久久派带你了解更多相关信息。

浅析rem

首先rem是css单位,相比于px固定的像素单位,rem更加的灵活,还有现在也比较好的vm。如果从未了解过,可以先过过眼

rem自适应。CSS3的REM设置字体大小

font size of the root element.

简单来说,rem就是根据html元素的字体大小来计算单位的。我们的需求就是说,根据不同的分辨率,我们元素的大小能够有所对应的变化,在视觉上能够做到很舒服的效果。想想我们在做pc端的时候,一般都是中间固定比如1200px像素,然后最小1200px,两边留白,这样我们无论放大缩小都不会影响效果。但是现在移动端各种屏幕的出现,适应性就更加的强烈。根据分辨率的不同让html的字体大小变化,我们在页面中写rem,由于rem是相对于根元素字体大小来计算的,那么就可以实现自适应的效果。

1.适配方式

适配方案采用rem布局, 根据屏幕分辨率大小不同,调整根元素html的font-size, 从而达到每个元素宽高自动变化,适配不同屏幕

2.使用 postcss-px2rem-exclude 插件

安装 npm install postcss-px2rem-exclude –save-dev

在项目根目录创建 postcss.config.js 文件

module.exports = {  plugins: {    autoprefixer: {},    \'postcss-px2rem-exclude\': {      remUnit: 192      // exclude: /node_modules|folder_name/i,    }  }}

3.安装 flexible.js (建议放到本地)

安装命令 npm install lib-flexible

(function(win, lib) {  var doc = win.document  var docEl = doc.documentElement  var metaEl = doc.querySelector(\'meta[name=\"viewport\"]\')  var flexibleEl = doc.querySelector(\'meta[name=\"flexible\"]\')  var dpr = 0  var scale = 0  var tid  var flexible = lib.flexible || (lib.flexible = {})  if (metaEl) {    console.warn(\'将根据已有的meta标签来设置缩放比例\')    var match = metaEl      .getAttribute(\'content\')      // eslint-disable-next-line no-useless-escape      .match(/initial\\-scale=([\\d\\.]+)/)    if (match) {      scale = parseFloat(match[1])      dpr = parseInt(1 / scale)    }  } else if (flexibleEl) {    var content = flexibleEl.getAttribute(\'content\')    if (content) {      // eslint-disable-next-line no-useless-escape      var initialDpr = content.match(/initial\\-dpr=([\\d\\.]+)/)      // eslint-disable-next-line no-useless-escape      var maximumDpr = content.match(/maximum\\-dpr=([\\d\\.]+)/)      if (initialDpr) {        dpr = parseFloat(initialDpr[1])        scale = parseFloat((1 / dpr).toFixed(2))      }      if (maximumDpr) {        dpr = parseFloat(maximumDpr[1])        scale = parseFloat((1 / dpr).toFixed(2))      }    }  }  if (!dpr && !scale) {    // var isAndroid = win.navigator.appVersion.match(/android/gi);    var isIPhone = win.navigator.appVersion.match(/iphone/gi)    var devicePixelRatio = win.devicePixelRatio    if (isIPhone) {      // iOS下,对于2和3的屏,用2倍的方案,其余的用1倍方案      if (devicePixelRatio >= 3 && (!dpr || dpr >= 3)) {        dpr = 3      } else if (devicePixelRatio >= 2 && (!dpr || dpr >= 2)) {        dpr = 2      } else {        dpr = 1      }    } else {      // 其他设备下,仍旧使用1倍的方案      dpr = 1    }    scale = 1 / dpr  }  docEl.setAttribute(\'data-dpr\', dpr)  if (!metaEl) {    metaEl = doc.createElement(\'meta\')    metaEl.setAttribute(\'name\', \'viewport\')    metaEl.setAttribute(\'content\', \'initial-scale=\' + scale + \', maximum-scale=\' + scale + \', minimum-scale=\' + scale + \', user-scalable=no\')    if (docEl.firstElementChild) {      docEl.firstElementChild.appendChild(metaEl)    } else {      var wrap = doc.createElement(\'p\')      wrap.appendChild(metaEl)      doc.write(wrap.innerHTML)    }  }  function refreshRem() {    var width = docEl.getBoundingClientRect().width    if (width / dpr > 540) {      width = width * dpr    }    var rem = width / 10    docEl.style.fontSize = rem + \'px\'    flexible.rem = win.rem = rem  }  win.addEventListener(    \'resize\',    function() {      clearTimeout(tid)      tid = setTimeout(refreshRem, 300)    },    false  )  win.addEventListener(    \'pageshow\',    function(e) {      if (e.persisted) {        clearTimeout(tid)        tid = setTimeout(refreshRem, 300)      }    },    false  )  if (doc.readyState === \'complete\') {    doc.body.style.fontSize = 12 * dpr + \'px\'  } else {    doc.addEventListener(      \'DOMContentLoaded\',      function() {        doc.body.style.fontSize = 12 * dpr + \'px\'      },      false    )  }  refreshRem()  flexible.dpr = win.dpr = dpr  flexible.refreshRem = refreshRem  flexible.rem2px = function(d) {    var val = parseFloat(d) * this.rem    if (typeof d === \'string\' && d.match(/rem$/)) {      val += \'px\'    }    return val  }  flexible.px2rem = function(d) {    var val = parseFloat(d) / this.rem    if (typeof d === \'string\' && d.match(/px$/)) {      val += \'rem\'    }    return val  }})(window, window[\'lib\'] || (window[\'lib\'] = {}))

上面的代码与安装的flexible.js不同

修改了

  function refreshRem() {    var width = docEl.getBoundingClientRect().width    if (width / dpr > 540) {      width = width * dpr    }    var rem = width / 10    docEl.style.fontSize = rem + \'px\'    flexible.rem = win.rem = rem  }

在main.js中引入

import \’路径/flexible.js\’

总结

到此这篇关于vue项目适配大屏端的文章就介绍到这了,更多相关vue适配大屏端内容请搜索趣讯吧以前的文章或继续浏览下面的相关文章希望大家以后多多支持趣讯吧!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,请发送邮件至 5579166@qq.com 举报,一经查实,本站将立刻删除。转转请注明出处:https://www.szhjjp.com/n/9164.html

(0)
上一篇 2021-08-02 21:38:29
下一篇 2021-08-02 21:38:32

相关推荐

  • 开始菜单、任务栏无响应(Win11更新翻车:解决办法来了)

    下个月初就要发布Win11正式版了,今天微软又推送了一个重大版本的Win11更新,beta渠道升级后为Windows11build22000.176,Insider渠道升级后是Windows11build22449,版本号首次超越22000。

    2021-09-03
    2950
  • 什么情况(雪莉疑似留下遗书)

    她一定经历了非人的无奈和绝望,才如此选择的。搜索了一下相关新闻,她12岁开始演艺生涯,长大后发现:我为什么要这样活?说明那并不是她想要的生活,并且从那时起开始反叛。作为一个没有特殊背景的年轻女孩,对关注和成功的渴望,可能驱使她在早期非常

    2021-12-15
    630
  • 夺得奥运首金的00后清华女生杨倩:因好奇学射击多次破纪录

    从2020年11月举行的中国射击队东京奥运会初步队伍选拔赛,到今年3月在广州落下帷幕的第四场选拔赛,杨倩均夺得女子10米气步枪个人冠军,位列积分榜第一。

    2021-07-24
    2640
  • 3090Super价格?3090Super多少钱

    日前据最新消息显示3090Super这张顶级卡也即将与我们见面,一方面激动的同时另一方面又想到如今的显卡价格,不禁心中一凉,那么这块3090Super的价格会是多少呢,下面就让我们一起来看看吧

    2021-08-31
    2500
  • 网络电视怎么看普通电视台节目(智能电视看电视台的直播)

    许多朋友喜欢看电视直播,但现在的智能电视不像以前插上线就能直接看。现在智能电视看电视台的频道有以下三种方法。第一种,安装宽带电视联系宽带运营商开通宽带电视,会有师傅上门安装机顶盒。安装完成后,电视切换信号源至机顶盒的画面即可安装完成后,搜索YXDS,

    2022-01-14 热点头条
    2350
  • 联想变了:打通任督二脉

    过去的三十年,PC成就了联想,联想已然成为PC时代的一个代名词。但与此同时,随着PC时代的逝去,深度依赖PC的联想也开始面临着变革难题。如何时代变革中继续高歌猛进,在某个时间区间里

    2021-09-12 热点头条
    2490

发表评论

登录后才能评论