图表联动
图标联动
思路
在 ECharts 中主要通过 on 方法添加点击事件处理函数,点击之后查找对应id的table的所有tr,遍历通过值设置对应行的属性使其高亮显示。
准备
<link rel="stylesheet" href="https://cdn.staticfile.org/twitter-bootstrap/3.3.7/css/bootstrap.min.css"> <script src="js/jquery-1.11.1.min.js"></script> <script src="https://cdn.staticfile.org/echarts/4.3.0/echarts.min.js"></script>
为了表联动的时候比较好看一点,先要导入css样式,这里用到bootstrap框架。
其次用jquery的ajax获取数据的话,导入jQuery的包
最后导入关键的echarts包
效果
关键代码
var tjzd = $("#Tjzd").find("option:selected").text(); var N = $("#N").val(); $.ajax({ url: "login", type: "post",//请求方式 data: {"tjzd": tjzd,"N":N}, datatype: "JSON",// success: function (data) { data = JSON.parse(data); alert(tjzd); if(tjzd=="ip"){ var text = "<table id='table' class=\"table table-striped\"><thead><tr><th>"+tjzd+"</th><th>访问数</th></tr></thead><tbody>"; var Data = []; for (i = 0; i < data.length; i++) { var str = new Object(); str.name = data[i].ip; str.value = data[i].counts; Data.push(str); text += "<tr>"; text += "<td>" + data[i].ip + "</td>" + "<td>" + data[i].counts + "</td>"; text += "</tr>"; } text += "</tbody></table>"; $("#show").html(text); } else if(tjzd=="流量") { var text = "<table id='table' class=\"table table-striped\"><thead><tr><th>" + tjzd + "</th><th>访问数</th></tr></thead><tbody>"; var Data = []; for (i = 0; i < data.length; i++) { var str = new Object(); str.name = data[i].traffic; str.value = data[i].counts; Data.push(str); text += "<tr>"; text += "<td>" + data[i].traffic + "</td>" + "<td>" + data[i].counts + "</td>"; text += "</tr>"; } text += "</tbody></table>"; $("#show").html(text); } echarts.init(document.getElementById('main')).dispose();//销毁上一个实例,否则会影响接下来的表样式 var myChart = echarts.init(document.getElementById('main')); // 指定图表的配置项和数据 var option = { series: [ { name: '访问来源', type: 'pie', radius: '55%', data: Data } ] }; myChart.setOption(option); myChart.on('click', function (params) { // 获取table下所有的tr let trs = $("#table tbody tr"); for (let i = 0; i < trs.length; i++) { // 获取tr下所有的td let tds = trs.eq(i).find("td"); // 先把之前的标记的success去掉 $("#table tbody tr").eq(i).removeClass('success'); // 如果点击图示的名字和table下的某一个行的第一个td的值一样 if (params.name == tds.eq(0).text()) { //设置success状态 $("#table tbody tr").eq(i).addClass('success'); // 跳转到页面指定的id位置 $("html,body").animate({scrollTop: $("#table tbody tr").eq(i).offset().top}, 1000); } } }); // 当鼠标落在tr时,显示浮动 $("#table tbody").find("tr").on("mouseenter", function () { // 获得当前匹配元素的个数 let row = $(this).prevAll().length; // 获得当前tr下td的名字 let name = $("#table tbody").find("tr").eq(row).find("td").eq(0).text(); // 设置浮动 myChart.dispatchAction({type: 'highlight', seriesIndex: 0, name: name});//选中高亮 myChart.dispatchAction({type: 'showTip', seriesIndex: 0, name: name});//选中高亮 }); // 当鼠标移开tr时候取消浮动 $("#table tbody").find("tr").on("mouseleave", function () { // 获得当前匹配元素的个数 let row = $(this).prevAll().length; // 获得当前tr下td的名字 let name = $("#table tbody").find("tr").eq(row).find("td").eq(0).text(); // 设置浮动 myChart.dispatchAction({type: 'downplay', name: name});//选中高亮 myChart.dispatchAction({type: 'hideTip', seriesIndex: 0, name: name});//选中高亮 });