echarts——tooltips动态循环展示+柱状图动态循环展示
最近在做看板,用的是echarts做的。遇到一些内容,做个笔记记录一下。
1.tooltips动态循环展示——数据不动,toolTip索引改变
上代码:
1.1 options中需要有tooltip
tooltip: { trigger: "axis", axisPointer: { // 坐标轴指示器,坐标轴触发有效 type: "shadow" // 默认为直线,可选为:'line' | 'shadow' } },
复制
由于此部分数据不动,只需要循环改变toolTip的索引即可实现动态循环展示了
1.2 写个方法,定时改变dataIndex值,就是当前展示tooltip的索引
var currentIndex = -1; setInterval(() => { var dataLen = data.length; echartsId.dispatchAction({ type: 'downplay', seriesIndex: 0, dataIndex: currentIndex }); currentIndex = (currentIndex + 1) % dataLen; echartsId.dispatchAction({ type: 'highlight', seriesIndex: 0, dataIndex: currentIndex, }); echartsId.dispatchAction({ type: 'showTip', seriesIndex: 0, dataIndex: currentIndex }); // console.log(currentIndex) }, 3000)
复制
2.数据动态改变——toolTip跟随改变
下面代码中:
1. source2 是数据源,有多条,要求每次都动态展示其中的6条。 2. 思路:先数组末尾添加第一条,然后splice去掉第一条,然后截取前6条数据。 3. 定时器循环,为了保证源数据不被污染,可以通过扩展运算符进行赋值数据。 4. column2:是echarts.init('dom'元素);之后的内容,只要是做过echarts的都明白的。 5. column2Draw:是options配置参数。这个基本上可以参考官网上的配置。 6. 一定要用setTimeout延时一下,不用写延时时间,否则会有部分数据不展示toolTip,有些展示。加个延时就解决了
复制
var column2 = echarts.init(document.getElementById("target-bar1-right")); column2.setOption(column2Draw); let barTimer = setInterval(() => { source2.push(source2[0]); source2.splice(0, 1) let data = [...source2]; var newarr1 = data.splice(0, 6); column2Draw.dataset.source = newarr1; column2.setOption(column2Draw); showTooltips(column2,newarr1); }, 3000) function showTooltips(echartsID,data){ setTimeout(function () { var currentIndex = data.length-1;//由于要求数据逆序,所以第一个也就是数据的最后一个了,如果数据没有要求逆序展示,则此处可以将currentIndex直接写为0, echartsID.dispatchAction({ type: 'showTip', seriesIndex: 0, dataIndex: currentIndex }); }) }
复制
由于此部分数据一直都在改变,所以toolTip的索引固定即可
。
一定要用setTimeout延时一下,不用写延时时间,否则会有部分数据不展示toolTip,有些展示。加个延时就解决了
下面附录:options的参数
var column2Draw = { tooltip: { trigger: 'axis', backgroundColor:'rgba(0,0,0,0.8)', axisPointer: { type: 'cross' }, formatter: function (params) { var relVal = ''; for (var i = 0, l = params.length; i < l; i++) { relVal += '<span style="font-size:18px; color:#fff;">'+params[i].value[2]+'</span>'+'<br/><span style=\"display:inline-block;margin-right:5px;border-radius:10px;width:10px;height:10px;background-color:#98FB98\"></span> 数量:'+params[i].value[1]; } return relVal } }, dataset: { source: source2data }, yAxis: [ { type: 'category', axisLine: { //y轴 show: false }, axisLabel: { textStyle: { //改变刻度字体样式 color: '#fff', fontSize: 14 } }, "axisTick": { //y轴刻度线 "show": false }, //网格样式 splitLine: { show: false, lineStyle: { color: '#333', width: 1, type: 'solid' } } }, ], series: [ { type: 'bar', silent: true, barWidth: 30, itemStyle: { //上方显示数值 normal: { color: new echarts.graphic.LinearGradient(1, 0, 0, 0, [{ offset: 0, color: "#07E07D" }, // 0% 处的颜色 { offset: 0.4, color: "#28AA6E" }, // 100% 处的颜色 { offset: 1, color: "#000" } // 100% 处的颜色 ]), label: { show: true, //开启显示 position: 'right', //在上方显示 textStyle: { //数值样式 color: '#fff', fontSize: 16 }, formatter: function (val) { // console.log(val); // ${val.value[0]}: let html = ` ${val.value[1]} `; return html; }, lineHeight: 10, padding: [5,10,0,-200], borderRadius: 6, backgroundColor: '#002262', } }, }, }, ], }
复制
多多积累,多多收获!!!