外部按钮调用ECharts图表的保存为图片操作,ech

作者: 生命科学  发布:2019-10-26

参考链接:echarts官网:http://echarts.baidu.com/
原型图(效果图):

最近使用ECharts库绘制图表,依据需求希望可以把图表设置的保存为图片操作可以在图表外部调用,主要是希望可以和项目之前的下载图片操作界面保持一致。然后上网找了一些方法,看了看也没遇到一个可以满意的。后来,突然想到了echart开放了源码,可以看看源码,找到下载的方法,然后调用不就可以了(可能是我技术忒次,看了看不只到如何直接调用方法,所以把源方法copy下来,改了改,只需要传递图表的容器id即可)

问题:
图例可以跟地图有联动效果,用来当列表使用,与地图有联动效果,简直太棒了,但是echarts图例太多,实在太占用空间,遮挡图表,又无法移动legend层。当屏幕小,满屏幕都是图例呀。。。如下图,头疼。

图片.png

echart图表示例(工具栏中有下载图片按钮)

图片 1

代码:

图片 2

image.png

<!DOCTYPE html>
<html>

    <head>
        <meta charset="UTF-8">
        <title></title>
    </head>

    <body>
        <!--   折线统计图 -->
        <div class="row">
            <div id="main" style="width: 900px; height: 350px;  margin-top:80px;"></div>
        </div>
    </body>
    <script src="js/echarts/echarts.min.js" type="text/javascript"></script>
    <script src="http://code.jquery.com/jquery-1.8.0.min.js"></script>
    <script type="text/javascript">
        // 基于准备好的dom,初始化echarts实例
        var myChart = echarts.init(document.getElementById('main'));
        // 指定图表的配置项和数据
        myChart.setOption({
            title: {
                text: '堆叠区域图'
            },
            tooltip: {
                trigger: 'axis',
                axisPointer: {
                    type: 'cross',
                    label: {
                        backgroundColor: '#6a7985'
                    }
                }
            },
            legend: {
                data: ['SA服务', '等号', '机修', '钣金', '喷漆', '总检', '洗车', '滞留']
            },
            toolbox: {
                feature: {
                    saveAsImage: {}
                }
            },
            grid: {
                left: '3%',
                right: '4%',
                bottom: '3%',
                containLabel: true
            },
            xAxis: [{
                type: 'category',
                boundaryGap: false,
                data: ['10.1', '10.2', '10.3', '10.4', '10.5', '10.6', '10.7']
            }],
            yAxis: [{
                type: 'value'
            }],
            series: [{
                    name: 'SA服务',
                    type: 'line',
                    stack: '总量',
                    areaStyle: { normal: {} },
                    data: [120, 132, 101, 134, 90, 230, 210]
                },
                {
                    name: '等号',
                    type: 'line',
                    stack: '总量',
                    areaStyle: { normal: {} },
                    data: [220, 182, 191, 234, 290, 330, 310]
                },
                {
                    name: '机修',
                    type: 'line',
                    stack: '总量',
                    areaStyle: { normal: {} },
                    data: [150, 232, 101, 154, 190, 330, 410]
                },
                {
                    name: '钣金',
                    type: 'line',
                    stack: '总量',
                    areaStyle: { normal: {} },
                    data: [320, 332, 301, 334, 190, 330, 320]
                },
                {
                    name: '喷漆',
                    type: 'line',
                    stack: '总量',
                    areaStyle: { normal: {} },
                    data: [310, 312, 301, 334, 390, 330, 320]
                },
                {
                    name: '总检',
                    type: 'line',
                    stack: '总量',
                    areaStyle: { normal: {} },
                    data: [320, 332, 311, 334, 390, 330, 320]
                },
                {
                    name: '洗车',
                    type: 'line',
                    stack: '总量',
                    areaStyle: { normal: {} },
                    data: [320, 332, 101, 334, 390, 310, 320]
                },
                {
                    name: '滞留',
                    type: 'line',
                    stack: '总量',
                    label: {
                        normal: {
                            show: true,
                            position: 'top'
                        }
                    },
                    areaStyle: { normal: {} },
                    data: [820, 932, 901, 934, 1290, 1330, 1320]
                }
            ]
        });
        /*  // 异步加载数据
          $.get('data.json').done(function (data) {
               // 填入数据
               myChart.setOption({ xAxis: { data: data.categories }, series: [{
                    // 根据名字对应到相应的系列
                    name: '销量',
                    data: data.data
               }]
               });});*/
    </script>

</html>

image.png

翻阅echarts相关文档,百度,Q群等途径寻找解决方法,都没有得到想要答案。于是鼓起勇气尝试修改源码。
开始的想法是:右边一列,不换行显示,出现滚动条,可以向下滚动。后来研究了echarts源码,觉得在canvas上加滚动条有点困难,所以选择了 向下翻页 的方式。

横向柱状图:

附上代码记录一下
//传递图表容器id
function downloadImpByChart(chartId) {
var myChart = echarts.getInstanceByDom(document.getElementById(chartId));
var url = myChart.getConnectedDataURL({
pixelRatio: 5,  //导出的图片分辨率比率,默认是1
backgroundColor: '#fff',  //图表背景色
excludeComponents:[  //保存图表时忽略的工具组件,默认忽略工具栏
'toolbox'
],
type:'png'  //图片类型支持png和jpeg
});
var $a = document.createElement('a');
var type = 'png';
$a.download = myChart.getOption().title[0].text + '.' + type;
$a.target = '_blank';
$a.href = url;
// Chrome and Firefox
if (typeof MouseEvent === 'function') {
var evt = new MouseEvent('click', {
view: window,
bubbles: true,
cancelable: false
});
$a.dispatchEvent(evt);
}
// IE
else {
var html = ''

效果图:

图片 3

image.png

本文由金沙澳门官网发布于生命科学,转载请注明出处:外部按钮调用ECharts图表的保存为图片操作,ech

关键词:

上一篇:没有了
下一篇:没有了