vue cli3适配所有端方案的实现


Posted in Javascript onApril 13, 2020

应用场景

页面需要在pc端和移动端同时兼容,以前我的方案都是使用媒体查询来判断当前设备大小,然后写两套或者三套css代码来兼容他们,能达到目的,并且效果不错,但是感觉还是稍微麻烦了一丢丢。后面了解了一下flexable.js脚本,稍作修改,基本可以满足我的需求。

postcss-px2rem

yarn add postcss-px2rem

postcss-px2rem插件可以将px转为rem,需要在vue.config.js(项目没有的话就手动创建一个)中配置插件

// css相关配置
  css: {
    // 启用 CSS modules
    modules: false,
    // 是否使用css分离插件
    extract: true,
    // 开启 CSS source maps?
    sourceMap: false,
    // css预设器配置项
    loaderOptions: {
      css: {},
      postcss: {
        plugins: [
          //remUnit这个配置项的数值是多少呢??? 通常我们是根据设计图来定这个值,原因很简单,便于开发。
          //假如设计图给的宽度是750,我们通常就会把remUnit设置为75,这样我们写样式时,可以直接按照设计图标注的宽高来1:1还原开发。
          require('postcss-px2rem')({
            remUnit: 75
          })
        ]
      }
    },
  }

flexible.js

flexible会为页面根据屏幕自动添加标签,动态控制initial-scale,maximum-scale,minimum-scale等属性的值 ===>设备缩放比

所以,在我们的html的header中,就不要之前配置的viewport的meta标签了

<meta name="viewport"
    content="width=device-width, viewport-fit=cover, initial-scale=1, maximum-scale=1, minimum-scale=1, user-scalable=no">

这种标签flexble会自动帮我们加上。

下面附上修改完后的flexble脚本代码:

(function flexible (window, document) {
  var docEl = document.documentElement
  var dpr = window.devicePixelRatio || 1
  var isMobileDevice = /(iPhone|iPad|iPod|iOS|Android)/i.test(navigator.userAgent);
  dpr = isMobileDevice ? dpr : 1;
  // adjust body font size
  function setBodyFontSize () {
    if (document.body) {
      document.body.style.fontSize = (12 * dpr) + 'px'
    }
    else {
      document.addEventListener('DOMContentLoaded', setBodyFontSize)
    }
  }
  setBodyFontSize();

  // set 1rem = viewWidth / 10
  function setRemUnit () {
    let width = docEl.clientWidth
    // 下面5行为自己加的代码,pc端页面不转rem
    let remUnitConfig = 75
    let viewWidthMax = remUnitConfig * 10
    if (width / dpr > viewWidthMax) {
      width = viewWidthMax * dpr
    }

    var rem = width / 10
    docEl.style.fontSize = rem + 'px'
  }

  setRemUnit()

  // reset rem unit on page resize
  window.addEventListener('resize', setRemUnit)
  window.addEventListener('pageshow', function (e) {
    if (e.persisted) {
      setRemUnit()
    }
  })

  // detect 0.5px supports
  if (dpr >= 2) {
    var fakeBody = document.createElement('body')
    var testElement = document.createElement('div')
    testElement.style.border = '.5px solid transparent'
    fakeBody.appendChild(testElement)
    docEl.appendChild(fakeBody)
    if (testElement.offsetHeight === 1) {
      docEl.classList.add('hairlines')
    }
    docEl.removeChild(fakeBody)
  }
}(window, document))

最后需要在index.html中引入脚本:
flexble.js要和index.html文件同级

vue cli3适配所有端方案的实现

最后在head添加js标签,引入它:

<script src="flexible.js" type="text/javascript" charset="utf-8"></script>

自此,项目就配置完了。

到此这篇关于vue cli3适配所有端方案的实现的文章就介绍到这了,更多相关vue cli3适配所有端内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Javascript 相关文章推荐
JavaScript 数组循环引起的思考
Jan 01 Javascript
jQuery队列控制方法详解queue()/dequeue()/clearQueue()
Dec 02 Javascript
为原生js Array增加each方法
Apr 07 Javascript
js 限制数字 js限制输入实现代码
Dec 04 Javascript
js获取url参数值的两种方式
Sep 10 Javascript
jQuery多级弹出菜单插件ZoneMenu
Dec 18 Javascript
JS+CSS实现Li列表隔行换色效果的方法
Feb 16 Javascript
JavaScript必知必会(七)js对象继承
Jun 08 Javascript
jQuery实现的简单无刷新评论功能示例
Nov 08 jQuery
使用JavaScrip模拟实现仿京东搜索框功能
Oct 16 Javascript
微信小程序8种数据通信的方式小结
Feb 03 Javascript
vue选项卡切换的实现案例
Apr 11 Vue.js
RxJS在TypeScript中的简单使用详解
Apr 13 #Javascript
JS错误处理与调试操作实例分析
Apr 13 #Javascript
JS正则表达式常见函数与用法小结
Apr 13 #Javascript
javascript设计模式 ? 桥接模式原理与应用实例分析
Apr 13 #Javascript
javascript设计模式 ? 适配器模式原理与应用实例分析
Apr 13 #Javascript
JavaScript创建表格的方法
Apr 13 #Javascript
JavaScript实现捕获鼠标坐标
Apr 12 #Javascript
You might like
全国FM电台频率大全 - 12 安徽省
2020/03/11 无线电
PHP IF ELSE简化/三元一次式的使用
2011/08/22 PHP
Destoon实现多表查询示例
2014/08/21 PHP
PHP+AjaxForm异步带进度条上传文件实例代码
2017/08/14 PHP
Laravel中9个不经常用的小技巧汇总
2019/04/16 PHP
PHP7 list() 函数修改
2021/03/09 PHP
JS与框架页的操作代码
2010/01/17 Javascript
基于Jquery的文字滚动跑马灯插件(一个页面多个滚动区)
2010/07/26 Javascript
js DOM的学习笔记
2011/12/22 Javascript
文件编码导致jquery失效的解决方法
2013/06/26 Javascript
JSP跨iframe如何传递参数实现代码
2013/09/21 Javascript
JavaScript动态改变div属性的实现方法
2015/07/22 Javascript
浅析JavaScript 调试方法和技巧
2015/10/22 Javascript
javascript实现C语言经典程序题
2015/11/29 Javascript
web前端开发upload上传头像js示例代码
2016/10/22 Javascript
jstree的简单实例
2016/12/01 Javascript
JavaScript基础进阶之数组方法总结(推荐)
2017/09/04 Javascript
JavaScript动态添加数据到表单并提交的几种方式
2019/06/26 Javascript
微信小程序按钮点击动画效果的实现
2019/09/04 Javascript
vue自定义标签和单页面多路由的实现代码
2020/05/03 Javascript
js实现车辆管理系统
2020/08/26 Javascript
[28:42]Ti4正赛VG vs NEWBEE1
2014/07/19 DOTA
[00:43]拉比克至宝魔导师密钥展示
2018/12/20 DOTA
使用Python编写简单网络爬虫抓取视频下载资源
2014/11/04 Python
Python3多线程爬虫实例讲解代码
2018/01/05 Python
python urllib爬虫模块使用解析
2019/09/05 Python
详解PyQt5信号与槽的几种高级玩法
2020/03/24 Python
python绘图pyecharts+pandas的使用详解
2020/12/13 Python
Looking4Parking美国:全球排名第一的机场停车比较品牌
2019/08/26 全球购物
师德学习感言
2014/01/31 职场文书
盗窃罪辩护词范文
2015/05/21 职场文书
幼儿园新学期开学寄语
2015/05/27 职场文书
庭外和解协议书
2016/03/23 职场文书
MySQL面试题讲解之如何设置Hash索引
2021/11/01 MySQL
九大龙王魂骨,山龙王留下躯干骨,榜首死的最憋屈(被捏碎)
2022/03/18 国漫
Vertica集成Apache Hudi重磅使用指南
2022/03/31 Servers