echarts 视图自适应问题

    最近在项目中用到了echarts,在处理视图自适应问题上记录一下;同时比较一下和highcharts的区别;

    在echarts中有一个resize的函数,可以直接在监听窗口变化时重新渲染即可; 

//在原生代码中
var myCharts = echarts.init(document.getElementById(‘#myCharts‘))
window.onresize = function (){
     myCharts.resize()
}

    如果是在vue项目中用到(我的项目是vue框架)

//在vue中,将init的函数封装在methods对象中,然后在该方法中调用resize函数
methods:{
     initChart(){
          this.chart = echarts.init(document.getElementById(‘chart‘))
          let options = {}//省略
          this.chart.setOption(options)

      //resize的函数可在这里调用
          window.onresize = function (){
              this.chart.resize()
          }
    }
}        

  在HighCharts中,有一个专门的函数可以直接设置。在highCharts的官方文档中,有一个函数reflow()重新适应函数

  reflow()让图表自适应容器,默认情况下,图表会自动响应window.resize时间来自适应图表容器(默认chart.reflow的配置是true),在图表中没办法响应事件时,则需要手动调用该函数

<!DOCTYPE html>
<html>
    <head>
        <meta charset="utf-8">
        <title></title>

    </head>
    <body>

        <div id="pieContainer"></div>

        <script src="js/highCharts/highcharts.js" type="text/javascript" charset="utf-8"></script>
        <script src="js/highCharts/exporting.js" type="text/javascript" charset="utf-8"></script>
        <script src="js/highCharts/highcharts-zh_CN.js" type="text/javascript" charset="utf-8"></script>
        <script type="text/javascript">
            var chart = Highcharts.chart(‘pieContainer‘, {
                chart: {
                    spacing: [40, 0, 40, 0]
                },
                title: {
                    floating: true,
                    text: ‘ ‘
                },
                subtitle:{
                    text:‘节点总数20个‘,
                    align:‘center‘,
                    verticalAlign:‘middle‘,
                    y:-10,
                    style:{
                        fontSize:14,
                        color:‘#212121‘
                    }

                },
                tooltip: {
                    pointFormat: ‘{series.name}: <b>{point.percentage:.1f}%</b>‘
                },
                plotOptions: {
                    pie: {
                        allowPointSelect: true,
                        cursor: ‘pointer‘,
                        dataLabels: {
                            enabled: true,
                            format: ‘<b>{point.name}</b>: {point.percentage:.1f} %‘,
                            style: {
                                color: (Highcharts.theme && Highcharts.theme.contrastTextColor) || ‘black‘
                            }
                        },
                        point: {
                            events: {
                                mouseOver: function(e) { // 鼠标滑过时动态更新标题
                                    // 标题更新函数,API 地址:https://api.hcharts.cn/highcharts#Chart.setTitle
                                    chart.setTitle({
                                        text: e.target.name + ‘\t‘ + e.target.y + ‘ %‘
                                    });
                                }
                                //,
                                // click: function(e) { // 同样的可以在点击事件里处理
                                //     chart.setTitle({
                                //         text: e.point.name+ ‘\t‘+ e.point.y + ‘ %‘
                                //     });
                                // }
                            }
                        },
                        events:{
                            mouseOut:function(e){
                                console.log(e)
                                $(‘tspan‘).html(‘节点总数20个‘)
                            }
                        }
                    }
                },
                series: [{
                    type: ‘pie‘,
                    innerSize: ‘80%‘,
                    name: ‘市场份额‘,
                    data: [{
                            name: ‘Firefox‘,
                            y: 45.0,
                            url: ‘http://bbs.hcharts.cn‘
                        },
                        [‘IE‘, 26.8],
                        {
                            name: ‘Chrome‘,
                            y: 12.8,
                            sliced: true,
                            selected: true,
                            url: ‘http://www.hcharts.cn‘
                        },
                        [‘Safari‘, 8.5],
                        [‘Opera‘, 6.2],
                        [‘其他‘, 0.7]
                    ]
                }]
            }, function(c) { // 图表初始化完毕后的会掉函数
                // 环形图圆心
                var centerY = c.series[0].center[1],
                    titleHeight = parseInt(c.title.styles.fontSize);
                // 动态设置标题位置
                c.setTitle({
                    y: centerY + titleHeight / 2
                });
            });
        </script>
    </body>
</html>

  

  

  

原文地址:https://www.cnblogs.com/bllx/p/11765423.html

时间: 2024-08-01 08:33:32

echarts 视图自适应问题的相关文章

echarts 的自适应

单图表自适应 var myChart = echarts.init(document.getElementById("main")) window.onresize = myChart.resize; 多图表自适应 var charts = []; myChart = echarts.init(document.getElementById('main')); myChart.setOption(option); charts.push(myChart); myChart = echa

vue框架下,echarts图表外部容器宽度设置为百分比时内容超出容器以及echarts图表自适应的实现方案

在vue.js框架下,创建echarts图表,当图表的外部容器的宽度设置为百分比时,出现图表内容宽度超出其外部容器的情况,几番调试,得解决方案如下: (备注说明:问题产生的具体原因尚不清晰,后面若知晓了再补充,但是初期解决问题阶段一定不要钻牛角,不是一开始就能或者可以知道真理的) 在创建了echart对象之后,就调用一次echart的resize方法,同时,获取图表数据的方法应该是异步的,如果是初期调试模拟也要用setTimeout延迟一下,0秒即OK了. methods: { ...mapAc

解决Echarts窗口自适应失效问题

1.之前的窗口自适应关键代码(window.onresize)分别写到了好几个function中,窗口自适应失效了.代码如下: $(function() { // 加载金额.油量.加油笔数.税额 $.ajax({ type:"POST", url:"Index!getOneAndAll.action", data: {"sjkd" : 10 , "startTime" : HOMEDATEYM}, dataType:"

Echarts图表自适应布局

flexbox结构下echarts图表如何实现自适应布局? 已知echarts图表需要放在页面中心,宽度为屏幕宽度1/2,高度为距顶部80px,距底部60px,怎么放这个echarts图表比较好. 在扩大.减小屏幕宽度时,echarts图表可以自动跟着屏幕变化. 问题在于第一次布局成功后,图表宽度就会固定,会撑起父级容器的宽度,反过来又导致图表组件本身收不到resize事件. 解决方法有两个: 1.父级容器设置overflow:hidden,监测到resize后,动态设置图表新的宽度.高度 2.

在vue项目中封装echarts的正确姿势

为什么需要封装echarts 每个开发者在制作图表时都需要从头到尾书写一遍完整的option配置,十分冗余 在同一个项目中,各类图表设计十分相似,甚至是相同,没必要一直做重复工作 可能有一些开发者忘记考虑echarts更新数据的特性,以及窗口缩放时的适应问题.这样导致数据更新了echarts视图却没有更新,窗口缩放引起echarts图形变形问题 我希望这个echarts组件能设计成什么样 业务数据和样式配置数据分离,我只需要传入业务数据就行了 它的大小要完全由使用者决定 不会因为缩放出现变形问题

让系统自动控制控件在控制器视图的位置

IPhone.IPad经常会遇到横竖屏切换,或者需要自动调整大小.如果你的界面不能用storyboard和xib来生成界面的话,先把控制器视图的frame属性值固定下来,然后添加subview(子视图)的时候,就可以使用视图继承类(UIView) 自带的 autoresizingMask 属性,之后如果横竖屏切换,或者是使用UIPopoverController之类的方法,就可以只设置一次frame属性,以后的frame属性都是自适应的(frame缩小太多的话效果不好,根据情况而定). 原理:设

用echartsjs 实现散点图与table表格双向交互,以及实现echarts取自于table数据,和自定义echarts提示内容

本人研究echarts已经有一段时间了,今天就分享几个关于echarts的小技巧.虽然看起来简单,但做起来却很繁琐,不过实用性倒是很好. 在一个大的页面中,左边为table表格,右边为echarts的散点图. 需求一,实现echarts中所有的散点取自table中的数据. 需求二:两个交互,交互1,点击左边的table中数据时,先实现table重新隔行变色,然后左边被点击的数据背景颜色变黄,右边的散点图点亮.通过table控制散点图. 交互2:当点击散点图中任意数据时,获取此数据来自于左边散点图

容器改变/窗口改变重新渲染echarts

是否遇见使用侧边栏菜单收缩/展开,echarts容器大小变化,但是echarts不重新自适应容器.或者,window窗口改变但是echarts不随着改变,针对这两种echarts不自适应的情况,分享下自己处理方法. 方法核心是:监听使echarts容器大小发生变化的因素及window窗口改变去调用echarts实例的resize()方法.(方法以VUE框架代码为示例) 一:为什么不能自适应:   ECharts没有绑定resize事件,显示区域大小发生改变内部并不知道,在容器大小发生改变时需要手

iOS UIView 基本属性用法

1.创建UIView      UIView * redView = [[UIView alloc] initWithFrame:CGRectMake(10, 100, 200, 100)];      UIView * blueView = [[UIView alloc] init];       把blueView粘贴到了redView上     [redView addSubview:blueView];           redView 就是blueView 的父视图        修