vue实现PC端分辨率适配操作


Posted in Javascript onAugust 03, 2020

依赖

项目基础配置使用 vue-cli 生成

自适应方案核心: 阿里可伸缩布局方案 lib-flexible

px转rem:px2rem,它有webpack的loader px2rem

开始

先使用vue脚手架初始化一个webpack项目

vue init webpack 项目名

项目初始化好了之后,进入项目目录中 (cd 项目名) 安装 lib-flexible 和 px2rem-loader

npm i lib-flexible -S

npm i px2rem-loader -D

安装好了之后还需要在项目的入口文件 main.js 里引入 lib-flexible

// main.js

import 'lib-flexible'

vue实现PC端分辨率适配操作

接下来为了验证 lib-flexible 是否生效,可以将app.vue中的内容改成:

<template>
 <div class="wrapper">
 <div class="box1"></div>
 <div class="box2"></div>
 <div class="box3"></div>
 <div class="box4"></div>
 <div class="box5"></div>
 </div>
</template>

<style>
 * {
 margin: 0;
 padding: 0;
 }
</style>

<style scoped>
 .wrapper div {
 height: 1rem;
 }
 .box1 {
 width: 2rem;
 background-color: coral;
 }
 .box2 {
 width: 4rem;
 background-color: skyblue;
 }
 .box3 {
 width: 6rem;
 background-color: palegreen;
 }
 .box4 {
 width: 8rem;
 background-color: wheat;
 }
 .box5 {
 width: 10rem;
 background-color: darkred;
 }
</style>

vue实现PC端分辨率适配操作

但是在实际开发中,我们通过设计稿得到的单位是px,所以要将px转换成rem再进行样式中。但如果都需要手动转的话,就很麻烦,所以需要一个工具替我们完成这项工作,这个时候就需要配置px2rem了,当然,编辑器可能也要对应的插件。

在 vue-cli 生成的 webpack 配置中,vue-loader 的 options 和其他样式文件 loader 最终是都是由 build/utils.js 里的一个方法生成的。我们只需在 cssLoader 后再加上一个 px2remLoader 即可,px2rem-loader 的 remUnit 选项意思是 1rem=多少像素,结合 lib-flexible 的方案,我们将 px2remLoader 的 options.remUnit 设置成设计稿宽度的 1/10,这里我们假设设计稿宽为 1920px。

//utils.js
const cssLoader = {
 loader: 'css-loader',
 options: {
  sourceMap: options.sourceMap
 }
 }

 const px2remLoader = {
 loader: 'px2rem-loader',
 options: {
  remUnit: 192
 }
 }
 //...

放进loaders数组中

//utils.js
function generateLoaders (loader, loaderOptions) {
 const loaders = options.usePostCSS ? [cssLoader, postcssLoader, px2remLoader] : [cssLoader, px2remLoader]

 if (loader) {
  loaders.push({
  loader: loader + '-loader',
  options: Object.assign({}, loaderOptions, {
   sourceMap: options.sourceMap
  })
  })
 }
//...

修改配置以后重启服务器,将原来app.vue文件中的样式改成:

<style scoped>
.wrapper div {
 height: 1rem;
}
.box1 {
 /* 750 * 20% */
 width: 150px;
 background-color: coral;
}
.box2 {
 /* 750 * 40% */
 width: 300px;
 background-color: skyblue;
}
.box3 {
 /* 750 * 60% */
 width: 450px;
 background-color: palegreen;
}
.box4 {
 /* 750 * 80% */
 width: 600px;
 background-color: wheat;
}
.box5 {
 /* 750 * 100% */
 width: 750px;
 background-color: darkred;
}
</style>

可以看到,适配依然生效。

以上是vue-cli2配置px2rem的方式,

如果脚手架用的是vue-cli3的话,由于vue-cli3 生成的目录结构没有build文件,所以在配置上也有一些不同。

vue-cli3配置方式:

找到文件 node_modules/@vue/cli-service/lib/config/css.js,添加规则:

config.module
  .rule('css')
  .test(/\.css$/)
  .oneOf('vue')
  .resourceQuery(/\?vue/)
  .use('px2rem')
  .loader('px2rem-loader')
  .options({
   remUnit: 75
  })

vue实现PC端分辨率适配操作

remUnit的值请自行修改。

但是有一个问题,我明明设置的宽度是按1920来的,为什么计算出来1rem=54px?

vue实现PC端分辨率适配操作

是不是插件哪里出了问题,或者在哪里定义过跟54或者540相关的东西?

(我这里全局搜索了54找到flexible.js文件)

找到flexible.js文件看下:

vue实现PC端分辨率适配操作

找到问题了就解决问题,既然文件把屏幕宽度写死了,那就不写死:

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;
 }

现在再重启项目,看一下运行结果:

vue实现PC端分辨率适配操作

end

有问题欢迎指正!

以上这篇vue实现PC端分辨率适配操作就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
javascript的内存管理详解
Aug 07 Javascript
jquery datepicker参数介绍和示例
Apr 15 Javascript
ext中store.load跟store.reload的区别示例介绍
Jun 17 Javascript
使用百度地图api实现根据地址查询经纬度
Dec 11 Javascript
Jquery解析json字符串及json数组的方法
May 29 Javascript
JavaScript数组复制详解
Feb 02 Javascript
jQuery插件FusionCharts实现的3D帕累托图效果示例【附demo源码】
Mar 25 jQuery
vuejs使用FormData实现ajax上传图片文件
Aug 08 Javascript
微信小程序之发送短信倒计时功能
Aug 30 Javascript
从零开始搭建webpack+react开发环境的详细步骤
May 18 Javascript
JS获取指定月份的天数两种实现方法
Jun 22 Javascript
design vue 表格开启列排序的操作
Oct 28 Javascript
浅谈JavaScript中的“!!”作用
Aug 03 #Javascript
基于脚手架创建Vue项目实现步骤详解
Aug 03 #Javascript
解决Vue的项目使用Element ui 走马灯无法实现的问题
Aug 03 #Javascript
vue-quill-editor 自定义工具栏和自定义图片上传路径操作
Aug 03 #Javascript
浅谈vue中使用编辑器vue-quill-editor踩过的坑
Aug 03 #Javascript
Vue 实现对quill-editor组件中的工具栏添加title
Aug 03 #Javascript
简单了解three.js 着色器材质
Aug 03 #Javascript
You might like
《PHP边学边教》(02.Apache+PHP环境配置――上篇)
2006/12/13 PHP
在字符串指定位置插入一段字符串的php代码
2010/02/16 PHP
ThinkPHP实现将SESSION存入MYSQL的方法
2014/07/22 PHP
JavaScript类和继承 prototype属性
2010/09/03 Javascript
jquery提升性能最佳实践小结
2010/12/06 Javascript
使用CSS和jQuery模拟select并附提交后取得数据的代码
2013/10/18 Javascript
js使下拉列表框可编辑不止是选择
2013/12/12 Javascript
一个获取第n个元素节点的js函数
2014/09/02 Javascript
Javascript页面跳转常见实现方式汇总
2015/11/28 Javascript
webpack+vue.js实现组件化详解
2016/10/12 Javascript
js实现自定义进度条效果
2017/03/15 Javascript
深入理解ES6的迭代器与生成器
2017/08/19 Javascript
详解vue-cli脚手架中webpack配置方法
2018/08/22 Javascript
Vuejs2 + Webpack框架里,模拟下载的实例讲解
2018/09/05 Javascript
详解用JS添加和删除class类名
2019/03/25 Javascript
jdk1.8+vue elementui实现多级菜单功能
2020/09/24 Javascript
python使用递归解决全排列数字示例
2014/02/11 Python
Python编程对列表中字典元素进行排序的方法详解
2017/05/26 Python
Python对多属性的重复数据去重实例
2018/04/18 Python
django加载本地html的方法
2018/05/27 Python
python脚本监控Tomcat服务器的方法
2018/07/06 Python
python对csv文件追加写入列的方法
2019/08/01 Python
Python空间数据处理之GDAL读写遥感图像
2019/08/01 Python
Python可变参数会自动填充前面的默认同名参数实例
2019/11/18 Python
python turtle工具绘制四叶草的实例分享
2020/02/14 Python
美国宠物商店:Wag.com
2016/10/25 全球购物
澳大利亚优质葡萄酒专家:Vintage Cellars
2019/01/08 全球购物
Parfumdreams英国:香水和化妆品
2019/05/10 全球购物
高校生生产实习自我鉴定
2013/09/21 职场文书
后勤岗位职责
2013/11/26 职场文书
食堂采购员岗位职责
2014/03/17 职场文书
节约能源标语
2014/06/17 职场文书
新闻专业毕业生求职信
2014/08/08 职场文书
村干部四风问题整改措施
2014/09/30 职场文书
幼儿园教师师德师风承诺书
2015/04/28 职场文书
2019职场实习报告该怎么写?
2019/07/01 职场文书