vue echarts map的使用,页面多图动态自适应
最近在vue中使用echarts时,遇到了一些坑,在此记录一下。
1:echarts map的使用
2:页面多图自适应,只有一个图生效
3:根据设备的dpr,动态的修改了meta标签中的initial-scale,导致引入的类似于echarts这样的外部插件的字体也产生了缩放
在echarts3.x后,echarts不在内置地图数据,地图的json数据需要单独下载引入。在vue中使用时,地图的json文件在node_modules中的echarts中,并不需要单独下载了。

代码如下:
<template>
<div class="map" id="s-map">
<div id="chartMap" class="chartGauge" :style="{height:height,width:width}"></div>
</div>
</template> <script type="text/ecmascript-6">
// 在之前已经单独引入了echarts文件
// 在此只需引入需要的地区的json文件
import gz from 'echarts/map/json/province/guizhou' export default {
components: { },
data () {
return {
font: '24'
}
},
props: {
width: {
type: String,
default: '200px'
},
height: {
type: String,
default: '400px'
}
},
watch: {},
methods: {
drawmap() {
let chartMap = document.getElementById('chartMap');
let smap = document.getElementById('s-map');
// 动态修改图表的宽高,达到自适应的效果
var resizeWorldMapContainer = function () {
chartMap.style.width = smap.clientWidth +'px';
chartMap.style.height = smap.clientHeight + 'px';
};
resizeWorldMapContainer();
// 注册可用的地图
echarts.registerMap('guizhou', gz);
let myChart = echarts.init(chartMap);
myChart.setOption({
roam: false,
series: [
{
name: '',
type: 'map',
map: 'guizhou',
mapType: '贵州',
roam: false,
zoom: 1.2,
itemStyle:{
normal:{
areaColor: '#181d36',
label:{
show:true,
textStyle: {
color: '#fff',
fontSize: this.font
}
},
},
emphasis:{
areaColor: '#fff',
label:{
show:true,
textStyle: {
color: '#398def',
fontSize: this.font
}
} }
},
data:[
{name: '贵州',value: Math.round(Math.random()*1000)}
]
}
]
});
/*
// window的方法在一个页面只加载一次,window.onresize只在一个图表中发生一次,因此在一个页面多图时,只有一个图会自适应
window.onresize = function () {
resizeWorldMapContainer();
myChart.resize();
};
*/
window.addEventListener("resize", function(){
resizeWorldMapContainer();
myChart.resize();
})
}
},
filters: {},
computed: {},
created () { },
mounted () {
this.drawmap()
},
destroyed () {}
}
</script> <style lang="scss" scoped>
@function px2rem($px) {
$rem: 75px;
@return ($px / $rem) + rem;
}
</style>
同一页面多图都达到自适应的效果,如下图,我在同一个页面中引入了map和gauge,分别属于不同的组件,每个组件中都有对图表自适应的设置,然后通过window.onresize进行处理,但是发现只有一个图表会自适应拖动效果。
window.onresize = function () {
resizeWorldMapContainer();
myChart.resize();
};
原因:wndow.onsize事件在同一页面中只会发生一次,因此会导致有点组件中window.onresize事件未发生
向window对象添加事件句柄
window.addEventListener("resize", function(){
resizeWorldMapContainer();
myChart.resize();
})

当修改了meta标签中的meta标签中的scale时,导致类似于echarts这样的库文字也会缩放,体验不好
动态修改meta中content的值,设置根节点字体大小
window.addEventListener('resize', () => {
scale();
}, 300)
function scale(){
let dpr = window.devicePixelRatio;
let meta = document.getElementsByTagName("meta");
//动态缩放
meta[1].setAttribute('content', 'initial-scale=' + 1 / dpr + ', maximum-scale=' + 1/dpr + ', minimum-scale=' + 1/dpr + ', user-scalable=no')
// 获取视窗宽度
let htmlWidth = document.documentElement.clientWidth || document.body.clientWidth;
// 获取视窗高度
let _html = document.getElementsByTagName('html')[0];
_html.style.fontSize = htmlWidth / 10 + 'px';
}
scale();
思路是这样的,获取页面的dpr,动态设置图表的fontSize = dpr*12 + 'px'即可正常显示。
vue echarts map的使用,页面多图动态自适应的更多相关文章
- 关于vue给对象新增属性页面不会动态更新
不知道大家有没有遇到过这个问题,当我们给data里边声明或者已经赋值过的对象或者数组,添加新的属性时,如果更新此属性的值是不会动态更新视图的. $set 看以下实例: 我们开始给drug_list追加 ...
- 转:ECharts图表组件之简单关系图:如何轻松实现另类站点地图且扩展节点属性实现点击节点页面跳转
站点地图不外乎就是罗列一个网站的层次结构,提炼地讲就是一个关系结构图.那么我们如何巧用ECharts图表组件内的简单关系结构图来实现一个站点的地图结构呢?另外如何点击某个节点的时候实现页面跳转呢? 针 ...
- 基于VUE选择上传图片并在页面显示(图片可删除)
demo例子: 依赖文件 : http://files.cnblogs.com/files/zhengweijie/jquery.form.rar HTML文本内容: <template> ...
- vue Baidu Map --- vue百度地图插件
vue Baidu Map 官网:https://dafrok.github.io/vue-baidu-map/#/zh/start/installation javascript 官网:http:/ ...
- model,map,MapAndVivew用于页面跳转时候使用的即跳转后才添加属性 这样再回调中无法使用 因为回调的前提是页面不调转;解决的方法是用responsewrite(普通的字符响应)
model,map,MapAndVivew用于页面跳转时候使用的即跳转后才添加属性 这样再回调中无法使用 因为回调的前提是页面不调转:解决的方法是用responsewrite
- Echarts Map 值域为小数的原因
最近做一个项目用到了Echarts Map不知道怎么回事,有时多了一位小时,可这个意义不用小数表示(1.0个人似乎觉得有点奇怪嘞 {boolean}calculable false 是否启用值域漫游, ...
- UI设计,使用 线框图(页面示意图或页面布局图)
在进行页面框架设计的时候,尝试画个 线框图(页面示意图或页面布局图)吧.
- Echarts同一页面多个图表自适应浏览器窗口大小——window.onresize
当前做的一个项目中,频繁使用到百度团队的Echarts,发在一个页面同时出现多个图表时,只有最后一个图表触发了window.onresize事件,查询官方文档后得到解决. 方法如下: hwChart. ...
- Vue Echarts 饼图设置默认选中一个
Vue Echarts 饼图设置默认选中一个 myChart.setOption(data) // data伟echarts所需要传入的参数,就是配置参数最多的那个玩意 myChart.dispatc ...
随机推荐
- Springcloud Gateway 路由管理
Spring Cloud Gateway 是 Spring Cloud 的一个全新项目,该项目是基于 Spring 5.0,Spring Boot 2.0 和 Project Reactor 等技术开 ...
- 使用Springboot + Gradle快速整合Mybatis-Plus
使用Springboot + Gradle快速整合Mybatis-Plus 作者:Stanley 罗昊 [转载请注明出处和署名,谢谢!] MyBatis-Plus(简称 MP)是一个 MyBatis ...
- ASP .NET SignalR起步
在网站开发中,时常需要使用消息推送功能,http协议是无状态连接,我们需要一个类似桌面程序中socket保持服务器和客户端连接的技术.signalr就是这样一个技术,他能保持网站页面和服务器的一个长连 ...
- SpaceSyntax【空间句法】之DepthMapX学习:第一篇 数据的输入 与 能做哪些分析
两部分,1需要喂什么东西给软件,2它能干什么(输出什么东西在下一篇讲) 博客园/B站/知乎/CSDN @秋意正寒 转载请在头部附上源地址 目录:https://www.cnblogs.com/onsu ...
- SpaceSyntax【空间句法】之DepthMapX学习:唠叨(目录)
最近花大力气学习了空间句法这一理论,以及其相关软件DepthMapX. 我觉得吧,你要是能搜索到这理论,这一软件名,这篇博客,那我甚至都不用介绍这软件是干什么用的——好吧,还是会说一下的. 虽然不知道 ...
- cesium 之地图贴地量算工具效果篇(附源码下载)
前言 cesium 官网的api文档介绍地址cesium官网api,里面详细的介绍 cesium 各个类的介绍,还有就是在线例子:cesium 官网在线例子,这个也是学习 cesium 的好素材. 内 ...
- sublime实现markdown浏览器预览
效果预览 实现 首先下载插件OmniMarkupPreviewer 方法:ctrl + shift + P 安装完成后搜索'OmniMarkupPreviewer'双击即可 下载完成后新建.md文件 ...
- zookeeper3.4.13集群安装
环境: Centos7.6 Zookeeper3.4.13 Java1.8 安装前准备 安装java 官网下载jdk-8u201-linux-x64.tar.gz 备用 三台主机:192.168.2. ...
- POST不同提交方式对应的Content-Type,及java服务器接收参数方式
POST不同提交方式对应的Content-Type,及java服务器接收参数方式 注:本博客参考了网上的文章结合自己工作总结后所写,主要用于记录自己工作所得,如有错误请批评指正. 简介: Conten ...
- 【神经网络篇】--基于数据集cifa10的经典模型实例
一.前述 本文分享一篇基于数据集cifa10的经典模型架构和代码. 二.代码 import tensorflow as tf import numpy as np import math import ...