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 相关文章推荐
提高 DHTML 页面性能
Dec 25 Javascript
JavaScript中的Document文档对象
Jan 16 Javascript
jQuery下扩展插件和拓展函数的写法(匿名函数使用的典型例子)
Oct 20 Javascript
JavaScript中字符串(string)转json的2种方法
Jun 25 Javascript
遮罩层点击按钮弹出并且具有拖动和关闭效果(两种方法)
Aug 20 Javascript
使用jquery.form.js实现图片上传的方法
May 05 Javascript
详解webpack介绍&amp;安装&amp;常用命令
Jun 29 Javascript
react native仿微信PopupWindow效果的实例代码
Aug 07 Javascript
如何快速解决JS或Jquery ajax异步跨域的问题
Jan 08 jQuery
jQuery实现的手动拖动控制进度条效果示例【测试可用】
Apr 18 jQuery
vue 实现input表单元素的disabled示例
Oct 28 Javascript
Vue ECharts实现机舱座位选择展示功能
May 15 Vue.js
浅谈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
4.与数据库的连接
2006/10/09 PHP
PHP中$_FILES的使用方法及注意事项说明
2014/02/14 PHP
php自定文件保存session的方法
2014/12/10 PHP
php文件压缩之PHPZip类用法实例
2015/06/18 PHP
PHP的openssl加密扩展使用小结(推荐)
2016/07/18 PHP
PHP+Ajax实现上传文件进度条动态显示进度功能
2018/06/04 PHP
List the Stored Procedures in a SQL Server database
2007/06/20 Javascript
WordPress 照片lightbox效果的运用几点
2009/06/22 Javascript
Prototype Function对象 学习
2009/07/12 Javascript
jquery调用wcf并展示出数据的方法
2011/07/07 Javascript
jquery仿QQ商城带左右按钮控制焦点图片切换滚动效果
2013/06/27 Javascript
js写的方法实现上传图片之后查看大图
2014/03/05 Javascript
Javascript通过overflow控制列表闭合与展开的方法
2015/05/15 Javascript
javascript匀速运动实现方法分析
2016/01/08 Javascript
JavaScript类型检测之typeof 和 instanceof 的缺陷与优化
2016/01/13 Javascript
bootstrap中添加额外的图标实例代码
2017/02/15 Javascript
面试常见的js算法题
2017/03/23 Javascript
JavaScript中递归实现的方法及其区别
2017/09/12 Javascript
浅谈webpack4.x 入门(一篇足矣)
2018/09/05 Javascript
详解微信小程序缓存--缓存时效性
2019/05/02 Javascript
Vue自定义render统一项目组弹框功能
2020/06/07 Javascript
JS实现数据动态渲染的竖向步骤条
2020/06/24 Javascript
Python单链表的简单实现方法
2014/09/23 Python
Python读取键盘输入的2种方法
2015/06/16 Python
Python如何读取MySQL数据库表数据
2017/03/11 Python
利用numpy和pandas处理csv文件中的时间方法
2018/04/19 Python
python3 selenium 切换窗口的几种方法小结
2018/05/21 Python
python绘制已知点的坐标的直线实例
2019/07/04 Python
Python 分享10个PyCharm技巧
2019/07/13 Python
关于tf.nn.dynamic_rnn返回值详解
2020/01/20 Python
python3 简单实现组合设计模式
2020/07/02 Python
美国环保妈妈、儿童和婴儿用品购物网站:The Tot
2019/11/24 全球购物
大学英语演讲稿(中英文对照)
2014/01/14 职场文书
租赁意向书范本
2014/04/01 职场文书
银行求职信怎么写
2019/06/20 职场文书
解决MySQL Varchar 类型尾部空格的问题
2022/04/06 MySQL