方法1: 使用插件: vue2 请使用v–scale–screen@1.0.0版本
import VScaleScreen from 'v-scale-screen'
Vue.use(VScaleScreen)
<v-scale-screen width="1920" height="1080">
<div>
<v-chart>....</v-chart>
<v-chart>....</v-chart>
<v-chart>....</v-chart>
<v-chart>....</v-chart>
<v-chart>....</v-chart>
</div>
</v-scale-screen>
方法2: 利用scale函数
export default {
mounted() {
//初始化自适应
this.handleScreenAuto()
//绑定自适应函数 ---防止浏览器栏变化后不再适配
window.onresize = () => this.handleScreenAuto()
},
destroyed() {
window.onresize = null
},
methods: {
//数据大屏自适应函数
handleScreenAuto() {
const designDraftWidth = 1920 //设计稿的宽度
const designDraftHeight = 1080 //设计稿的高度
//根据屏幕的变化适配的比例
const scale =
document.documentElement.clientWidth / document.documentElement.clientHeight <
designDraftWidth / designDraftHeight
? document.documentElement.clientWidth / designDraftWidth
: document.documentElement.clientHeight / designDraftHeight
//缩放比例
document.querySelector(
'#screen'
).style.transform = `scale(${scale}) translate(-50%)`
},
},
}
// id=screen中放大屏展示内容, 可以通过mixins混入引入
方法3: flexiable + rem
-
https://github.com/amfe/lib–flexible/blob/2.0/index.js 下载 flexible.js 文件
-
function fontSize(res, defaultWidth = 3840) { let docEl = document.documentElement, clientWidth = window.innerWidth || document.documentElement.clientWidth || document.body.clientWidth if (!clientWidth) return // 此处的3840 为设计稿的宽度,记得修改! let fontSize = clientWidth / defaultWidth return res * fontSize } // 使用,在需要的位置用函数包裹即可 fontSize: fontSize(30)
window.addEventListener('resize', function () { chart.resize() }) // chart 为注册绑定的echarts对象
方法4: 使用DataV的全屏容器 + flex + 百分比布局
<dv-full-screen-container>content</dv-full-screen-container>
方法5: vw + vh
- 创建极端 vw 和 vh 的样式函数
// utils.scss // 使用scss的math函数,https://sass-lang.com/documentation/breaking-changes/slash-div @use 'sass:math'; //默认设计稿的宽度 $designWidth: 1920; //默认设计稿的高度 $designHeight: 1080; //px转为vw的函数 @function vw($px) { @return math.div($px, $designWidth) * 100vw; } //px转为vh的函数 @function vh($px) { @return math.div($px, $designHeight) * 100vh; // math.div(x, y) = x / y }
- 在 vue.config.js 中进行全局注册
css: {
loaderOptions: {
//全局配置utils.scss,详细配置参考vue-cli官网
sass: {
additionalData: `@import "@/assets/styles/utils.scss";`, // 注意:在 sass-loader v8 中,这个选项名是 "prependData"
},
},
},
chart-wrapper {
width: vw(300); // 300 / 1980
height: vh(200);
font-size: vh(16); // 16 / 1080
background-color: black;
}
关于echart中字体大小–适配屏幕尺寸
<template>
<div class="linechart" ref="line"></div>
</template>
<script>
import adaptFontSize from '@/utils/fontSIze'
export default {
name: 'linechart',
mixins: [adaptFontSize],
mounted() {
this.initChart()
this.adapterChart()
window.addEventListener('resize', () => { // 屏幕尺寸变化时,重新渲染
this.adapterChart()
})
},
beforeDestoryed() {
// 组件销毁前移除监听,防止内存泄露
window.removeEventListener('resize')
},
methods: {
// 字体大小适配代码!!!
transfomrFontSize(val) {
let clientWidth =
window.innerWidth ||
document.documentElement.clientWidth ||
document.body.clientWidth
if (!clientWidth) return
let radio = clientWidth / 1920
return radio * val
},
},
initChart() {
/*大屏*/
this.myChart = this.$echarts.init(this.$refs.line)
let option = {
tooltip: {
trigger: 'axis',
axisPointer: {
// 坐标轴指示器,坐标轴触发有效
type: 'shadow', // 默认为直线,可选为:'line' | 'shadow'
},
},
grid: {
left: '0%',
right: '10%',
top: '15%',
bottom: '5%',
containLabel: true,
},
xAxis: {
type: 'category',
data: this.xData,
name: this.xName,
},
textStyle: {
//图例文字的样式
color: 'red',
},
yAxis: {
name: this.yName,
nameLocation: 'end',
nameTextStyle: {
color: 'white',
},
textStyle: {
color: 'white',
},
type: 'value',
axisLine: { show: true },
splitLine: { show: true, lineStyle: { type: 'dashed' } },
},
series: [
{
type: this.type,
label: {
normal: {
show: true,
formatter: '{b}',
},
},
data: this.yData,
},
],
}
option && this.myChart.setOption(option)
},
adapterChart() {
let option = {
textStyle: {
fontSize: this.transfomrFontSize(20),
},
}
this.myChart.setOption(option)
this.myChart.resize() // 必须调用自身的resize方法!!!!!
},
},
}
</script>
混入规则:
原文地址:https://blog.csdn.net/qq_33404590/article/details/128827224
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.7code.cn/show_44842.html
如若内容造成侵权/违法违规/事实不符,请联系代码007邮箱:suwngjj01@126.com进行投诉反馈,一经查实,立即删除!
声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。