Echarts dataview 实现点击复制图中文字数据

一、需求

写文章之前先贴一张bug图。测试提bug啦,产品名称太长不能复制用户体验很差!他希望y轴的value可以复制! 喏,就是下图:

二、寻寻觅觅

要在生成的canvas上复制数据这是个很棘手的问题,如何实现呢?苦思良久各种百度goole还是没找到答案,仔细研究了xy轴的配置参数也还是一头雾水。 看到大佬的博客"# Echarts 图表,解决不能复制图中信息问题,点击复制图中文字数据"以为胜利的曙光。

js 复制代码
tooltip: {  //提示框组件 用于复制时间用
          enterable: true, //鼠标是否可进入提示框浮层中
          trigger: 'axis', //触发类型, 'axis'坐标轴触发
          triggerOn:"click", //提示框触发的条件,'click'鼠标点击时触发
          axisPointer: {  // 坐标轴指示器,坐标轴触发有效
            type: 'shadow' //触发为一整行
          },
          formatter: function (params) { //提示框浮层内容格式器 --- 在这我用于定制个人数据
            var tar = params[1]; //获取到参数
            return tar.name ; //把时间数据 return 出去
          }
        },
.  //提示框组件
 *{
      -webkit-user-select: text !important;
      user-select: text !important;
  }

他还特别交代:注意:上面的 css,必须写的,要不然复制不了(以上来自:blog.csdn.net/weixin_6138...%25E3%2580%2582 "https://blog.csdn.net/weixin_61382400/article/details/127010308)%E3%80%82") 不知道是不是我理解有误,经过一番操作并没有实现我的需求(求大佬指点)。

三、dataview的出现

放上各种寻觅不得答案,请教了我的摸鱼搭子,真是一语惊醒梦中人! 果然echarts的toolbox中有数据转换的功能:dataview。

js 复制代码
 toolbox: {
    show : true,                                 //是否显示工具栏组件
    showTitle:false,                             //是否在鼠标 hover 的时候显示每个工具 icon 的标题
    feature : {
        mark : {                                 // '辅助线开关'
            show: true
        },
        dataView : {                            //数据视图工具,可以展现当前图表所用的数据,编辑后可以动态更新
            show: true,                         //是否显示该工具。
            title:"数据视图",
            readOnly: false,                    //是否不可编辑(只读)
            lang: ['数据视图', '关闭', '刷新'],  //数据视图上有三个话术,默认是['数据视图', '关闭', '刷新']
            backgroundColor:"#fff",             //数据视图浮层背景色。
            textareaColor:"#fff",               //数据视图浮层文本输入区背景色
            textareaBorderColor:"#333",         //数据视图浮层文本输入区边框颜色
            textColor:"#000",                    //文本颜色。
            buttonColor:"#c23531",              //按钮颜色。
            buttonTextColor:"#fff",             //按钮文本颜色。
        },
    },

                    }

数据转换生成的样式简单粗暴,还需要给它稍微的加工加工。

给dataview添加optionToContent的属性,虽然不能完全按照测试的意思实现需求,但是也不失为一个围魏救赵的办法。

js 复制代码
dataView : {                        
    optionToContent:function(opt){
        var axisData = opt.yAxis[0].data;
        var series = opt.series;
        var table = '<table class="ap-table"><tbody><tr class="dataViewTr">'
                     + '<td class="dataViewHead">' + '记录要点'+ '</td>'
                     + '<td class="dataViewHead">' + '完成进度' + '</td>'
                     + '</tr>';
        for (var i = 0, l = axisData.length; i < l; i++) {
            table += '<tr class="dataViewTr">'
                     + '<td class="dataViewTd">' + axisData[i] + '</td>'
                     + '<td class="dataViewTd">' + series[0].data[i] + '</td>'
                     + '</tr>';
        }
        table += '</tbody></table>';
        return table;}
},

不知道大佬们还有没有其他的解决办法。 下面贴一份toolbox的配置方便以后使用(来自:blog.csdn.net/zxl_start/a...

js 复制代码
options:{
toolbox:{
    show : true,                                 //是否显示工具栏组件
    orient:"horizontal",                        //工具栏 icon 的布局朝向'horizontal' 'vertical'
    itemSize:15,                                 //工具栏 icon 的大小
    itemGap:10,                                  //工具栏 icon 每项之间的间隔
    showTitle:true,                             //是否在鼠标 hover 的时候显示每个工具 icon 的标题
    feature : {
        mark : {                                 // '辅助线开关'
            show: true
        },
        dataView : {                            //数据视图工具,可以展现当前图表所用的数据,编辑后可以动态更新
            show: true,                         //是否显示该工具。
            title:"数据视图",
            readOnly: false,                    //是否不可编辑(只读)
            lang: ['数据视图', '关闭', '刷新'],  //数据视图上有三个话术,默认是['数据视图', '关闭', '刷新']
            backgroundColor:"#fff",             //数据视图浮层背景色。
            textareaColor:"#fff",               //数据视图浮层文本输入区背景色
            textareaBorderColor:"#333",         //数据视图浮层文本输入区边框颜色
            textColor:"#000",                    //文本颜色。
            buttonColor:"#c23531",              //按钮颜色。
            buttonTextColor:"#fff",             //按钮文本颜色。
        },
        magicType: {                            //动态类型切换
            show: true,
            title:"切换",                       //各个类型的标题文本,可以分别配置。
            type: ['line', 'bar'],              //启用的动态类型,包括'line'(切换为折线图), 'bar'(切换为柱状图), 'stack'(切换为堆叠模式), 'tiled'(切换为平铺模式)
        },
        restore : {                             //配置项还原。
            show: true,                         //是否显示该工具。
            title:"还原",
        },
        saveAsImage : {                         //保存为图片。
            show: true,                         //是否显示该工具。
            type:"png",                         //保存的图片格式。支持 'png' 和 'jpeg'。
            name:"pic1",                        //保存的文件名称,默认使用 title.text 作为名称
            backgroundColor:"#ffffff",        //保存的图片背景色,默认使用 backgroundColor,如果backgroundColor不存在的话会取白色
            title:"保存为图片",
            pixelRatio:1                        //保存图片的分辨率比例,默认跟容器相同大小,如果需要保存更高分辨率的,可以设置为大于 1 的值,例如 2
        },
        dataZoom :{                             //数据区域缩放。目前只支持直角坐标系的缩放
            show: true,                         //是否显示该工具。
            title:"缩放",                       //缩放和还原的标题文本
            xAxisIndex:0,                       //指定哪些 xAxis 被控制。如果缺省则控制所有的x轴。如果设置为 false 则不控制任何x轴。如果设置成 3 则控制 axisIndex 为 3 的x轴。如果设置为 [0, 3] 则控制 axisIndex 为 0 和 3 的x轴
            yAxisIndex:false,                   //指定哪些 yAxis 被控制。如果缺省则控制所有的y轴。如果设置为 false 则不控制任何y轴。如果设置成 3 则控制 axisIndex 为 3 的y轴。如果设置为 [0, 3] 则控制 axisIndex 为 0 和 3 的y轴
        },
    },
    zlevel:0,                                   //所属图形的Canvas分层,zlevel 大的 Canvas 会放在 zlevel 小的 Canvas 的上面
    z:2,                                         //所属组件的z分层,z值小的图形会被z值大的图形覆盖
    left:"center",                              //组件离容器左侧的距离,'left', 'center', 'right','20%'
    top:"top",                                   //组件离容器上侧的距离,'top', 'middle', 'bottom','20%'
    right:"auto",                               //组件离容器右侧的距离,'20%'
    bottom:"auto",                              //组件离容器下侧的距离,'20%'
    width:"auto",                               //图例宽度
    height:"auto",                              //图例高度
};
}

边学习边整理,如有问题欢迎指正,大家一起加油!侵删~

相关推荐
上官花雨25 分钟前
什么是axios?怎么使用axios封装Ajax?
前端·ajax·okhttp
米奇妙妙wuu26 分钟前
React中 setState 是同步的还是异步的?调和阶段 setState 干了什么?
前端·javascript·react.js
李刚大人29 分钟前
react-amap海量点优化
前端·react.js·前端框架
闹闹没有闹1 小时前
socket连接封装
前端
qq_364371722 小时前
Vue 内置组件 keep-alive 中 LRU 缓存淘汰策略和实现
前端·vue.js·缓存
y先森3 小时前
CSS3中的弹性布局之侧轴的对齐方式
前端·css·css3
new出一个对象6 小时前
uniapp接入BMapGL百度地图
javascript·百度·uni-app
你挚爱的强哥7 小时前
✅✅✅【Vue.js】sd.js基于jQuery Ajax最新原生完整版for凯哥API版本
javascript·vue.js·jquery
y先森8 小时前
CSS3中的伸缩盒模型(弹性盒子、弹性布局)之伸缩容器、伸缩项目、主轴方向、主轴换行方式、复合属性flex-flow
前端·css·css3
前端Hardy8 小时前
纯HTML&CSS实现3D旋转地球
前端·javascript·css·3d·html