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 相关文章推荐
JQuery 解析多维的Json数据格式
Nov 02 Javascript
jQuery判断iframe中元素是否存在的方法
May 11 Javascript
jQuery实现设置、移除文本框默认值功能
Jan 13 Javascript
js类式继承与原型式继承详解
Apr 07 Javascript
Treegrid的动态加载实例代码
Apr 29 Javascript
JavaScript实现图片轮播组件代码示例
Nov 22 Javascript
js的OOP继承实现(必看篇)
Feb 18 Javascript
微信小程序页面间通信的5种方式
Mar 31 Javascript
vue2组件之select2调用的示例代码
Oct 12 Javascript
vuejs+element UI点击编辑表格某一行时获取内容填入表单的示例
Oct 31 Javascript
vue-cli3使用mock数据的方法分析
Mar 16 Javascript
NestJs使用Mongoose对MongoDB操作的方法
Feb 22 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程序的方法
2009/03/09 PHP
PHP 图片文件上传实现代码
2010/12/29 PHP
php 中的4种标记风格介绍
2012/05/10 PHP
PHP内核探索:变量概述
2014/01/30 PHP
php curl上传、下载、https登陆实现代码
2017/07/23 PHP
jquery tab插件制作实现代码
2010/06/22 Javascript
Grid得到选择行数据的方法总结
2011/01/17 Javascript
Json实现异步请求提交评论无需跳转其他页面
2014/10/11 Javascript
详解JavaScript中常用的函数类型
2015/11/18 Javascript
Angularjs修改密码的实例代码
2017/05/26 Javascript
JS实现前端缓存的方法
2017/09/21 Javascript
快速搭建vue2.0+boostrap项目的方法
2018/04/09 Javascript
Vue手把手教你撸一个 beforeEnter 钩子函数
2018/04/24 Javascript
解决vue的变量在settimeout内部效果失效的问题
2018/08/30 Javascript
vue axios post发送复杂对象问题
2019/06/04 Javascript
Node.js爬虫如何获取天气和每日问候详解
2019/08/26 Javascript
微信小程序实现注册登录功能(表单校验、错误提示)
2019/12/10 Javascript
[00:29]2019完美世界全国高校联赛(秋季赛)总决赛海口落幕
2019/12/10 DOTA
python生成不重复随机数和对list乱序的解决方法
2018/04/09 Python
Python基于递归和非递归算法求两个数最大公约数、最小公倍数示例
2018/05/21 Python
Python爬虫小技巧之伪造随机的User-Agent
2018/09/13 Python
python 安装库几种方法之cmd,anaconda,pycharm详解
2020/04/08 Python
Django框架实现在线考试系统的示例代码
2020/11/30 Python
canvas实现滑动验证的实现示例
2020/08/11 HTML / CSS
益模软件Java笔试题
2012/03/27 面试题
商务英语本科生的自我评价分享
2013/11/15 职场文书
数学系个人求职信范文
2014/01/30 职场文书
博士毕业生自我鉴定范文
2014/04/13 职场文书
校园活动策划方案
2014/06/13 职场文书
2014院党委领导班子及其成员群众路线对照检查材料思想汇报
2014/10/04 职场文书
党的群众路线教育实践活动总结大会主持词
2014/10/30 职场文书
银行保安拾金不昧表扬稿
2015/05/05 职场文书
Anaconda安装pytorch及配置PyCharm 2021环境
2021/06/04 Python
Java Optional<Foo>转换成List<Bar>的实例方法
2021/06/20 Java/Android
C3 线性化算法与 MRO之Python中的多继承
2021/10/05 Python
基于PostgreSQL/openGauss 的分布式数据库解决方案
2021/12/06 PostgreSQL