参考:

https://zhuanlan.zhihu.com/p/33050579

https://blog.csdn.net/sophia_xiaoma/article/details/78055947

http://www.jb51.net/article/125820.htm

https://www.cnblogs.com/zhzhair-coding/p/6953982.html?utm_source=itdadao&utm_medium=referral

对于ECharts生成的图表数据,series区域默认已添加了开启了点击方法,但是需要自己的定义函数。

X轴和Y轴默认未开启点击事件,需要开启。

triggerEvent:true

本示例实现了以下功能:

1.点击柱状图时会刷新数据,但不刷新页面。

2.数据部分可以通过ajax函数生成。

3.点击刷新更新柱状图内容。

具体代码如下:

<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>ECharts</title>
<!-- <script src="http://echarts.baidu.com/dist/echarts.min.js"></script> -->
<script src="https://cdn.bootcss.com/echarts/4.0.2/echarts.js"></script>
<script src="https://cdn.bootcss.com/jquery/3.3.1/jquery.js"></script>
</head>
<body>
<!-- 为ECharts准备一个具备大小(宽高)的Dom -->
您选择了X轴的标签[<span id="xAxisTag"></span>],他的值为[<span id="barValue"></span>]
<input type="submit" name="" value="刷新" onclick="refresh()">
<div id="main" style="width: 600px;height:400px;"></div> </body>
<script type="text/javascript">
function getSeriesData(){ //根据js方法本身的加载顺序,此方法需要定义在myChart前面
//此处可以通过后台生成数据,这样后台就无需返回整个option,只需要返回动态的数据部分即可
// $.ajax({
// type: 'GET',
// url: "getSeriesData",
// cache: false,
// async : false,
// dataType: 'json',
// success: function (result) {
// seriesdata = result;
// },
// error: function (result, XMLHttpRequest, textStatus, errorThrown) {
// // 状态码
// // console.log(XMLHttpRequest.status);
// // console.log(XMLHttpRequest.toLocaleString());
// // 状态
// // console.log(XMLHttpRequest.readyState);
// // 错误信息
// // console.log(textStatus);
// }
// }); var n1 = Math.floor(Math.random()*50+1);
var n2 = Math.floor(Math.random()*50+1);
var n3 = Math.floor(Math.random()*50+1);
var n4 = Math.floor(Math.random()*50+1);
var n5 = Math.floor(Math.random()*50+1);
var n6 = Math.floor(Math.random()*50+1);
seriesdata = [n1, n2, n3, n4, n5, n6]; return seriesdata;
}
</script>
<script type="text/javascript">
// 基于准备好的dom,初始化echarts实例
var myChart = echarts.init(document.getElementById('main'));
// var n1 = Math.floor(Math.random()*50+1);
// var n2 = Math.floor(Math.random()*50+1);
// var n3 = Math.floor(Math.random()*50+1);
// var n4 = Math.floor(Math.random()*50+1);
// var n5 = Math.floor(Math.random()*50+1);
// var n6 = Math.floor(Math.random()*50+1);
//var seriesdata = [n1, n2, n3, n4, n5, n6]; var seriesdata ;
seriesdata=getSeriesData();
console.log("seriesdata getSeriesData is "+seriesdata); // 指定图表的配置项和数据
var option = {
title: {
text: 'ECharts 入门示例'
},
tooltip: {},
legend: {
data:['销量']
},
xAxis: {
data: ["衬衫","羊毛衫","雪纺衫","裤子","高跟鞋","袜子"],
triggerEvent:true,
axisTick: {
alignWithLabel: true //坐标值是否在刻度中间
} },
yAxis: {triggerEvent:true},
series: {
name: '销量',
type: 'bar',
//data: [n1, n2, n3, n4, n5, n6],
data : seriesdata,
itemStyle: {
normal: {
color: function(params) {
       var colorList = ['#2eddc1','#FCCE10','#E87C25','#277bbb','#E87fff','#277aaa'];
//若返回的list长度不足,不足部分自动显示为最后一个颜色
       return colorList[params.dataIndex]
       },
label: {
show: true,
position: 'top'
}
}
}
}
};
// 使用刚指定的配置项和数据显示图表。
myChart.setOption(option); myChart.on('click', function (params) {
// 当componentType == "xAxis"或者 ==“yAxisx”时,取被点击时坐标轴的值params.value
// alert("单击了"+params.componentType+"x轴标签"+params.value);
// if(params.componentType == "xAxis"){
// alert("单击了"+params.value+"x轴标签");
// }else if (params.componentType == "yAxis") {
// alert("单击了"+params.value+"y轴标签");
// }
// else{
// alert("单击了"+params.name+"柱状图"+params.value);
// } // invalid start
// 获取data长度
//   alert(option.series[0].data.length);
// 获取地N个data的值
//   alert(option.series[0].data[3]);
// 获取series中param.dataIndex事件对应的值
// alert(params.dataIndex);
//   alert(option.series[params.seriesIndex].data[params.dataIndex]);
//invalid end // alert(param.value);
// 获取xAxis当前点击事件索引对应的值,可以用作传参
// alert("test "+option.xAxis.data[params.dataIndex]);
  //param.dataIndex 获取当前点击索引,
//   alert(param.dataIndex);
// 当前点击事件位于series中的索引
// alert(param.seriesIndex);
//param具体包含的参数见 https://blog.csdn.net/allenjay11/article/details/76033232
updatePage(option.xAxis.data[params.dataIndex],params.value); refresh();
});
</script> <script type="text/javascript">
function updatePage(tag, value){
var xAxisTag = $("#xAxisTag");
xAxisTag.html(tag);
var barValue = $("#barValue");
barValue.html(value);
}; function refresh(){
// 刷新页面
// location.reload();
//window.location.reload(); //局部刷新main内容
//此处没有用常用的刷新div等方法,而是直接改变了option的值,然后重新赋值给myChart
console.log("refresh");
option.title.text='入门';
// option.series.data[0] = Math.floor(Math.random()*50+1);
// option.series.data[1] = Math.floor(Math.random()*50+1);
// option.series.data[2] = Math.floor(Math.random()*50+1);
// option.series.data[3] = Math.floor(Math.random()*50+1);
// option.series.data[4] = Math.floor(Math.random()*50+1);
// option.series.data[5] = Math.floor(Math.random()*50+1); //console.log(option.series.data[0]);
//var v1 = Math.floor(Math.random()*50+1);
//option.series.data[0] = v1; //简化方法,调用getSeriesData更新数据。
option.series.data = getSeriesData(); myChart.setOption(option);
}; </script>
</html>

将部分内容放入到方法中,如X轴数据部分,series的data部分,方便将样式与数据进行分离。

<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>ECharts</title>
<!-- <script src="http://echarts.baidu.com/dist/echarts.min.js"></script> -->
<script src="https://cdn.bootcss.com/echarts/4.0.2/echarts.js"></script>
<script src="https://cdn.bootcss.com/jquery/3.3.1/jquery.js"></script>
</head>
<body>
<!-- 为ECharts准备一个具备大小(宽高)的Dom -->
您选择了X轴的标签[<span id="xAxisTag"></span>],他的值为[<span id="barValue"></span>]
<input type="submit" name="" value="刷新" onclick="refresh()">
<div id="main" style="width: 600px;height:400px;"></div> </body>
<script type="text/javascript">
function getSeriesData(){ //根据js方法本身的加载顺序,此方法需要定义在myChart前面
//此处可以通过后台生成数据,这样后台就无需返回整个option,只需要返回动态的数据部分即可
// $.ajax({
// type: 'GET',
// url: "getSeriesData",
// cache: false,
// async : false,
// dataType: 'json',
// success: function (result) {
// seriesdata = result;
// },
// error: function (result, XMLHttpRequest, textStatus, errorThrown) {
// // 状态码
// // console.log(XMLHttpRequest.status);
// // console.log(XMLHttpRequest.toLocaleString());
// // 状态
// // console.log(XMLHttpRequest.readyState);
// // 错误信息
// // console.log(textStatus);
// }
// }); var n1 = Math.floor(Math.random()*50+1);
var n2 = Math.floor(Math.random()*50+1);
var n3 = Math.floor(Math.random()*50+1);
var n4 = Math.floor(Math.random()*50+1);
var n5 = Math.floor(Math.random()*50+1);
var n6 = Math.floor(Math.random()*50+1);
seriesdata = [n1, n2, n3, n4, n5, n6]; return seriesdata;
} function getxAxisData(){
//同样适用以ajax的方式从后台获取数据
xAxisData = ["衬衫","羊毛衫","雪纺衫","裤子","高跟鞋","袜子"];
return xAxisData;
} function getSaleOption(){
saleOption = {
title: {
text: 'ECharts 入门示例'
},
tooltip: {},
legend: {
data:['销量']
},
xAxis: {
// data: ["衬衫","羊毛衫","雪纺衫","裤子","高跟鞋","袜子"],
data : getxAxisData(),
triggerEvent:true,
axisTick: {
alignWithLabel: true //坐标值是否在刻度中间
} },
yAxis: {triggerEvent:true},
series: {
name: '销量',
type: 'bar',
//data: [n1, n2, n3, n4, n5, n6],
// data : seriesdata,
data : getSeriesData(),
itemStyle: {
normal: {
color: function(params) {
       var colorList = ['#2eddc1','#FCCE10','#E87C25','#277bbb','#E87fff','#277aaa'];
//若返回的list长度不足,不足部分自动显示为最后一个颜色
       return colorList[params.dataIndex]
       },
label: {
show: true,
position: 'top'
}
}
}
}
}; return saleOption;
} </script>
<script type="text/javascript">
// 基于准备好的dom,初始化echarts实例
var myChart = echarts.init(document.getElementById('main')); // 指定图表的配置项和数据
var option = getSaleOption();
// 使用刚指定的配置项和数据显示图表。
myChart.setOption(option); myChart.on('click', function (params) {
//param具体包含的参数见 https://blog.csdn.net/allenjay11/article/details/76033232
updatePage(option.xAxis.data[params.dataIndex],params.value); refresh();
});
</script> <script type="text/javascript">
function updatePage(tag, value){
var xAxisTag = $("#xAxisTag");
xAxisTag.html(tag);
var barValue = $("#barValue");
barValue.html(value);
}; function refresh(){ //局部刷新series内容
//此处没有用常用的刷新div等方法,而是直接改变了option的值,然后重新赋值给myChart //简化方法,调用getSeriesData更新数据。
option.series.data = getSeriesData(); myChart.setOption(option);
}; </script>
</html>

ECharts柱状图添加点击事件的更多相关文章

  1. Echarts柱状图的点击事件

    最近在做一些图表统计的功能,用到了百度的开源图表软件Echatrs,不得不提的是:不但上手简单而且扩展功能也是十分强大.在使用的过程中也遇到了不少问题,可能由于有关Echatrs的资料并不是很齐全,所 ...

  2. echarts对每个data[i]的图片添加点击事件

    1.综述:以饼图为例,只需要对echarts对象option添加以下几行代码即可 //添加点击事件(单击),还有其他鼠标事件和键盘事件等等 myChart1.on("click", ...

  3. ECharts问题--散点图中对散点添加点击事件

    1. 我们这次就没有先讲解怎么使用散点图了,这个跟之前的一些图还是很类似的,不会的可以去官网上面查看 API 使用.我们这次讲解的是为散点图中的散点添加点击事件,然后在图表之外的一个 div 里面显示 ...

  4. echart字符云之添加点击事件

    // 路径配置 require.config({ paths : { echarts : 'jquery/echarts-2.2.7/build/dist' } }); // 使用EChart.js画 ...

  5. echarts雷达图点击事件

    最近看见别人问的问题,点击雷达图的拐点,获取点击数据的问题,直接上代码. echarts配置问题:https://www.douban.com/note/509404582/ <!doctype ...

  6. echarts雷达图点击事件 包含(2.x,3.85,4.02)测试

    最近看见别人问的问题,点击雷达图的拐点,获取点击数据的问题,直接上代码. echarts 2x 的点击事件 echarts配置问题:https://www.douban.com/note/509404 ...

  7. iOS开发小技巧 - label中的文字添加点击事件

    Label中的文字添加点击事件 GitHub地址:https://github.com/lyb5834/YBAttributeTextTapAction 以前老师讲过类似的功能,自己懒得回头看了,找了 ...

  8. 【Swift 2.1】为 UIView 添加点击事件和点击效果

    前言 UIView 不像 UIButton 加了点击事件就会有点击效果,体验要差不少,这里分别通过自定义和扩展来实现类似 UIButton 的效果. 声明 欢迎转载,但请保留文章原始出处:) 博客园: ...

  9. ThinkPHP框架下,给jq动态添加的标签添加点击事件移除标签

    jq移除标签主要就是$("#要移除的id").remove();不再赘述,这里要提醒的是jq中动态添加标签后怎样添加点击事件.一般的jq添加点击事件是用这种方法$("#i ...

随机推荐

  1. 把一个List拆分为几个大小一样的List

    static void Main(string[] args) { List<String> tarArr = new List<String>(); tarArr.Add(& ...

  2. 1.1 vue.js devtools使用教程

    1. vue.js devtools使用教程

  3. servlet中为什么doGet方法没有被调用的一种可能(笔记)

    创建了一个servlet,然后在doGet()方法内写一些简单的测试语句,但是在实际运行中发现并没有调用到doGet()方法,后来发现自己在创建servlet是将service()方法也勾选上去了,而 ...

  4. 大话WebRTC的前世今生

    音视频的历史 音视频可以说是人类与生俱来的需求,人一出生就要用耳朵听,用眼睛看.中国的古代神话中为此还专门设置了两位神仙(千里眼和顺风耳),他们可以听到或看到千里之外的声音或景像. 为了解决听的远和看 ...

  5. 《剑指offer》第六十五题(不用加减乘除做加法)

    // 面试题65:不用加减乘除做加法 // 题目:写一个函数,求两个整数之和,要求在函数体内不得使用+.-.×.÷ // 四则运算符号. #include <iostream> int A ...

  6. C++之初体验

    #include<iostream> using namespace std; int main() { cout<<" Hello imooc "< ...

  7. Codeforces Gym - 101102B - The Little Match Girl

    B. The Little Match Girl time limit per test 1 second memory limit per test 256 megabytes input stan ...

  8. ubuntu 14.04 postgresql 的总结

    1)为了允许远程连接: a) http://askubuntu.com/questions/423165/remotely-access-postgresql-database To open the ...

  9. 《HTTP 权威指南》笔记:第十二章 基本认证体制

    导言 客户端可以通过网络来得到想要的信息,但是有一些信息并不能是对所有人都能看到的,因此必须有一种认证机制.服务器需要通过这种方式来了解用户身份,一旦服务器知道了用户的身份,就可以让用户能够访问请求的 ...

  10. OnSen UI结合AngularJs打造”美团"APP首页 --Hybrid Ap

    1.页面效果图: 演示链接地址:http://www.nxl123.cn/bokeyuan/meiTuanDemo_home/ 2.核心代码 home.html: <ons-page id=&q ...