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 相关文章推荐
jquery.Jwin.js 基于jquery的弹出层插件代码
May 23 Javascript
利用div+jquery自定义滚动条样式的2种方法
Jul 18 Javascript
js控制表单奇偶行样式的简单方法
Jul 31 Javascript
table行随鼠标移动变色示例
May 07 Javascript
JS实现文件动态顺序载入的方法
Mar 07 Javascript
js style.display=block显示布局错乱问题的解决方法
Sep 21 Javascript
React实现点击删除列表中对应项
Jan 10 Javascript
JavaScript简单验证表单空值及邮箱格式的方法
Jan 20 Javascript
详解js的异步编程技术的方法
Feb 09 Javascript
通过构造函数实例化对象的方法
Jun 28 Javascript
es6 super关键字的理解与应用实例分析
Feb 15 Javascript
vue实现列表拖拽排序的功能
Nov 02 Javascript
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
PHP+MYSQL的文章管理系统(二)
2006/10/09 PHP
phpMyAdmin 链接表的附加功能尚未激活的问题
2010/08/01 PHP
php截取中文字符串不乱码的方法
2013/12/25 PHP
PHP计算一年多少个星期和每周的开始和结束日期
2014/07/01 PHP
PHP+MySQL实现无极限分类栏目的方法
2015/12/23 PHP
提交表单后 PHP获取提交内容的实现方法
2016/05/25 PHP
php大小写转换函数(strtolower、strtoupper)用法介绍
2017/11/17 PHP
javascript call和apply方法
2008/11/24 Javascript
javascript onkeydown,onkeyup,onkeypress,onclick,ondblclick
2009/02/04 Javascript
点击弹出层外区域关闭弹出层jquery特效示例
2013/08/25 Javascript
文本有关的样式和jQuery求对象的高宽问题分别说明
2013/08/30 Javascript
解决bootstrap中modal遇到Esc键无法关闭页面
2015/03/09 Javascript
jQuery制作可自定义大小的拼图游戏
2015/03/30 Javascript
JavaScript实现跨浏览器的添加及删除事件绑定函数实例
2015/08/04 Javascript
JS导出PDF插件的方法(支持中文、图片使用路径)
2016/07/12 Javascript
jQuery实现火车票买票城市选择切换功能
2017/09/15 jQuery
AngularJS实现图片上传和预览功能的方法分析
2017/11/08 Javascript
vue.js实现只弹一次弹框
2018/01/29 Javascript
微信小程序封装自定义弹窗的实现代码
2019/05/08 Javascript
Js实现粘贴上传图片的原理及示例
2020/12/09 Javascript
使用Python爬了4400条淘宝商品数据,竟发现了这些“潜规则”
2018/03/23 Python
Flask框架学习笔记之消息提示与异常处理操作详解
2019/08/15 Python
Django admin.py 在修改/添加表单界面显示额外字段的方法
2019/08/22 Python
python KNN算法实现鸢尾花数据集分类
2019/10/24 Python
python如何实现复制目录到指定目录
2020/02/13 Python
Python连接Hadoop数据中遇到的各种坑(汇总)
2020/04/14 Python
澳大利亚领先的美容护肤品零售商之一:SkincareStore
2018/01/22 全球购物
欧舒丹美国官网:L’Occitane美国
2018/02/23 全球购物
Notino希腊:购买香水和美容产品
2019/07/25 全球购物
一家外企的面试题目(C/C++面试题,C语言面试题)
2014/03/24 面试题
介绍一下gcc特性
2012/01/20 面试题
致接力运动员广播稿
2014/02/17 职场文书
新店开张活动方案
2014/08/24 职场文书
交通安全横幅标语
2014/10/07 职场文书
入党现实表现材料
2014/12/23 职场文书
管理人员岗位职责
2015/02/14 职场文书