首页 > 其他分享 >Vue :一种简单的前端分辨率适配和echarts适配方案

Vue :一种简单的前端分辨率适配和echarts适配方案

时间:2022-12-27 14:22:52浏览次数:47  
标签:Vue toRem 适配 px 1920 宽度 echarts 分辨率

一、背景

对前端不甚了解,对分辨率适配一窍不通,奈何不得不用。文章中的分辨率适配原理我可能说不太明白,但会写出清晰可行的操作步骤。

二、核心代码

分辨率适配

用到了rem、vw(视窗宽度)、clamp函数。

$maxWidth:3840;
$minWidth:1920;
@function toRem($px) {
  @return clamp(
    ($px/ 16px) * 1rem,
    ($px/ ($minWidth * 1px)) * 100 * 1vw,
    (($px/ ($minWidth * 1px)) * $maxWidth) / 16 * 1rem
  );
}

maxWidth是适配的最大宽度,minWidth是适配的最小宽度。这里代表可以适配宽度在1920-3840px的分辨率,也就是1-4k。

如果没有设置html的ffont-size,浏览器默认1rem = 16px。

关于clamp函数:

clamp(MIN, VAL, MAX)

三个参数分别是最小值、首选值、最大值;它代表一个取值区间。

首先按中间的首选值计算,如果首选值小于最小值,则取最小值;如果首选值大于最大值,则取最大值;如果介于两者之间,则取首选值。

首选值的计算用到了vw,视窗宽度 * 1% = 1vw,比如窗口的高度是1920px,那么1vw就是192px.

这里计算首选值,先用传入的px除以1920,得到目标长度相对于1920的百分比,再乘以100计算出视窗高度vw。

例如适配2k分辨率,2560x1440.

传入100px,计算出100px/1920px = 0.052 ,相当于在1920px的分辨率中,它占比0.052,而1920*1% = 1vw,所以它是5.2vw.

在2k分辨率(2560宽度)的屏幕中,5.2vw = 2560 * 1% * 5.2 = 128px.

同样的,最大值也是这么计算出来的,只不过代入了具体的值——最大宽度3840,同时把px换成了rem。

echarts 适配

relPx(value) {
  // 容器的宽度
  const containerWidth = this.$refs.mychart.getBoundingClientRect().width
  // 1920 * 1080分辨率下,设计稿的宽度
  const containerWidthAt1920 = 300
  // 容器相对1920的占比
  const scale = containerWidth / containerWidthAt1920
  // 用这个比例计算出适配当前容器大小的尺寸
  return value * scale
},

使用方法

1.引入scss和node--sass

npm install --save-dev sass-loader
npm install --save-dev node-sass

如果报错,请注意版本问题。

2.在/src/assets目录下新建common.scss,文件内容如下


$maxWidth:3840;
$minWidth:1920;
@function toRem($px) {
  @return clamp(
    ($px/ 16px) * 1rem,
    ($px/ ($minWidth * 1px)) * 100 * 1vw,
    (($px/ ($minWidth * 1px)) * $maxWidth) / 16 * 1rem
  );
}

3.在vue页面的style中引入common.scss

<style scoped lang="scss">
	@import '../assets/common.scss';

	.div3 {
		background-color: cadetblue;
		width: toRem(500px);
		height: toRem(600px);
		line-height: toRem(600px);
		margin-top: toRem(-50px);
	}
	.div4 {
		background-color: coral;
		width: toRem(500px);
		height: toRem(300px);
		line-height: toRem(500px);
	}
</style>

就可以正常使用了

echarts的适配

这个方法直接写在methods里面:

relPx(value) {
  // 容器的宽度
  const containerWidth = this.$refs.mychart.getBoundingClientRect().width
  // 1920 * 1080分辨率下,设计稿的宽度
  const containerWidthAt1920 = 300
  // 容器相对1920的占比
  const scale = containerWidth / containerWidthAt1920
  // 用这个比例计算出适配当前容器大小的尺寸
  return value * scale

然后直接在options中使用就可以了。

标签:Vue,toRem,适配,px,1920,宽度,echarts,分辨率
From: https://www.cnblogs.com/northwest332/p/17006366.html

相关文章

  • Echarts显示工具按钮
    toolbox:{show:true,orient:'vertical',left:'right',top:'center',feature:{......
  • 【Vue 中 Axios 的封装和 API 接口的管理】
    一.封装各模块作用引入一般我会在项目的src目录中,新建一个request文件夹,然后在里面新建一个http.js和一个api.js文件。http.js文件用来封装我们的axios,api.js用来统一管理......
  • 【Vue2.0与Vue3.0区别总结】
    vue2.0和vue3.0区别结构部分程序主入口文件main.jsvue2.0vue3.0-暴露出createApp方法组件语法部分(vue3.0主要针对api的优化,vue3.0兼容vue2.0写法)vue3.0使用​​组......
  • H5跳转微信小程序-成功案例(VUE)(踩坑无数)
    H5跳转微信小程序-成功案例(VUE)(踩坑无数)TuoMei已于2022-07-2909:52:22修改准备工作根据官方提供的资料需准备以下几点:1、已认证的服务号2、绑定JS接口安全域名......
  • Vue3之watch
     watch监视ref函数<template><h2>当前求和为:{{sum}}</h2><button@click="sum++">点我+1</button><hr><h2>当前的信息为:{{msg}}</h2><button......
  • Vue按需引入注册UI以及自定义组件的封装
    1.单文件global注册自定义组件的封装importAfrom"../view/A.vue";importBfrom"../view/B.vue";constcomponents={A,B};exportdefault{install(Vue){......
  • Vue笔记
    watch和watchEffect的区别简述watchEffect不需要指定监听的属性,自动收集依赖,只要在回调中引用到了响应式的属性,只要这些属性发生改变,回调就会执行。watch可以获取到新......
  • Vue3之computed计算属性
    计算属性  computed函数与Vue2.x中computed配置功能一致写法<template><h1>一个人的信息</h1>姓:<inputtype="text"v-model="person.firstName">......
  • Vue技术5.Vue中的MVVM
    <!DOCTYPEhtml><html><head><matacharset="UTF-8"/><title>理解MVVM</title><!--引入Vue--><scripttype="text/javascript"src......
  • Vue技术6.1回顾Object.defineproperty方法
    <!DOCTYPEhtml><html><head><matacharset="UTF-8"/><title>回顾Object.defineproperty方法</title></head><body><scripttype="te......