图表插件--jqplot交互演示样例
简单交互
- **
- * Class: jqPlot
- * Plot object returned by call to $.jqplot. Handles parsing user options,
- * creating sub objects (Axes, legend, title, series) and rendering the plot.
- */
- function jqPlot() {
- ...其他代码
- // 方法:draw
- // 绘制全部的块节点到图表容器中,绘制之前不会清空容器
- this.draw = function(){
- ...其他代码
- // 给注冊的事件绑定事件处理器
- this.bindCustomEvents();
- ...其他代码
- }
- ...其他代码
- this.bindCustomEvents = function() {
- // 给图表容器(指chart1这个div)绑定点击事件处理函数,其他类似
- this.eventCanvas._elem.bind('click', {plot:this}, this.onClick);
- this.eventCanvas._elem.bind('dblclick', {plot:this}, this.onDblClick);
- this.eventCanvas._elem.bind('mousedown', {plot:this}, this.onMouseDown);
- this.eventCanvas._elem.bind('mousemove', {plot:this}, this.onMouseMove);
- this.eventCanvas._elem.bind('mouseenter', {plot:this}, this.onMouseEnter);
- this.eventCanvas._elem.bind('mouseleave', {plot:this}, this.onMouseLeave);
- if (this.captureRightClick) {
- this.eventCanvas._elem.bind('mouseup', {plot:this}, this.onRightClick);
- this.eventCanvas._elem.get(0).oncontextmenu = function() {
- return false;
- };
- }
- else {
- this.eventCanvas._elem.bind('mouseup', {plot:this}, this.onMouseUp);
- }
- };
- // 点击事件处理函数,另有其他如onDblClick、onMouseDown、onMouseMove等
- this.onClick = function(ev) {
- // 传入标准化的Event对象,会携带一些数据属性
- // 传出非标准化Event对象
- var positions = getEventPosition(ev);
- var p = ev.data.plot;
- var neighbor = checkIntersection(positions.gridPos, p);
- // 获取jqplotClick事件
- var evt = $.Event('jqplotClick');
- evt.pageX = ev.pageX;
- evt.pageY = ev.pageY;
- // 关键代码,触发jqplotClick事件,并传递一些数据
- $(this).trigger(evt, [positions.gridPos, positions.dataPos, neighbor, p]);
- };
- ...其他代码
- }
能够看出,我们不能直接给画布绑定一些诸如click、mouseover之类的常规事件。假设要处理这些事件,我们要做的应该是绑定jqplotClick事件,当我们触发点击事件时,图表会自己主动帮我们触发画布的jqplotClick事件。因此,要处理图表点击事件,我们仅仅须要加入例如以下代码就可以:
- $('#chart1').on('jqplotClick', function(){
- // 事件处理代码
- });
我们先来绘制一个简单的线形图表,在此图表上加入相关的交互事件:
- <!DOCTYPE html>
- <html>
- <head>
- <meta charset="utf-8" />
- <title>图表事件交互</title>
- <link rel="stylesheet" type="text/css" href="js/jqPlot/1.0.4/jquery.jqplot.min.css"/>
- <!--[if lt IE 9]>
- <script language="javascript" type="text/javascript" src="js/jqPlot/1.0.4/excanvas.js"></script>
- <![endif]-->
- <script src="http://libs.baidu.com/jquery/1.8.2/jquery.min.js"></script>
- <script src="js/jqPlot/1.0.4/jquery.jqplot.min.js" type="text/javascript"></script>
- <script type="text/javascript" charset="utf-8">
- $(function(){
- $.jqplot('chart1', [[75, 69, 71, 77, 76, 81, 73]]);
- // 如前所述,加入事件处理
- $('#chart1').on('jqplotClick', function(){
- alert('图表点击事件被触发...');
- });
- });
- </script>
- </head>
- <body>
- <div id="chart1" style="width: 800px;height: 400px;">
- <!--
- 描写叙述:图表展示区域
- -->
- </div>
- </body>
- </html>
在此图表上,我们点击不论什么位置,都能够看到例如以下结果:
携带数据的交互处理
- $(this).trigger(evt, [positions.gridPos, positions.dataPos, neighbor, p]);
在这行代码的前面,我们能够知道这些传递的数据到底是什么意思。当中,position.gridPos是指鼠标点击位置相对于整个Grid对象的坐标位置,它是一个点对象,包括x和y两个属性;position.dataPos表示鼠标点击位置在数据区域所相应各个轴的取值,它也是一个对象,只是包括的属性则为xaxis、x2axis、yaxis、y2axis、y3axis、y4axis、y5axis、y6axis、y7axis、y8axis、y9axis以及yMidAxis;neighbor则为事件源数据,这里为空;參数p则为触发事件的图表对象。
- // 第一个參数是Event对象,其余四个參数分别相应position.gridPos、position.dataPos、neighbor和p
- $('#chart1').on('jqplotClick', function(ev, gridpos, datapos, neighbor, plot){
- plot.replot({
- seriesDefaults:{
- color:'#ff0000'
- }
- });
- });
如上,当我们再去点击图表时,图表中的数据线段就会变成红色,例如以下图效果:
更精细的事件交互
- <!DOCTYPE html>
- <html>
- <head>
- <meta charset="utf-8" />
- <title>图表事件交互</title>
- <link rel="stylesheet" type="text/css" href="js/jqPlot/1.0.4/jquery.jqplot.min.css"/>
- <!--[if lt IE 9]>
- <script language="javascript" type="text/javascript" src="js/jqPlot/1.0.4/excanvas.js"></script>
- <![endif]-->
- <script src="http://libs.baidu.com/jquery/1.8.2/jquery.min.js"></script>
- <script src="js/jqPlot/1.0.4/jquery.jqplot.min.js" type="text/javascript"></script>
- <script src="js/jqPlot/1.0.4/plugins/jqplot.pointLabels.min.js" type="text/javascript"></script>
- <script type="text/javascript" charset="utf-8">
- $(function(){
- var chart = $.jqplot('chart1', [[75, 69, 71, 77, 76, 81, 73]], {
- title:'《jqPlot图表插件使用说明》日阅读数趋势图',
- axes:{ // 详细坐标轴属性
- xaxis:{
- label:'日期',
- ticks:[[0,'06/22'], [1,'06/23'], [2,'06/24'],
- [3,'06/25'], [4,'06/26'], [5,'06/27'],
- [6,'06/28'], [7,'06/29'], [8,'06/30']
- ]
- },
- yaxis: {
- label: '阅读数'
- }
- },
- seriesDefaults:{
- pointLabels: { // 显示数据点,依赖于jqplot.pointLabels.min.js文件
- show: true
- }
- }
- });
- $('#chart1').on('jqplotDataClick', function(ev, gridpos, datapos, neighbor, plot){
- // 事件处理代码
- });
- });
- </script>
- </head>
- <body>
- <div id="chart1" style="width: 800px;height: 400px;">
- <!--
- 描写叙述:图表展示区域
- -->
- </div>
- </body>
- </html>
效果图:
- $('#chart1').on('jqplotDataClick', function(ev, gridpos, datapos, neighbor, plot){
- // 获取标签下标
- var tickIndex = neighbor[0];
- // 获取标签值(日期)
- var date = chart.axes.xaxis.ticks[tickIndex][1];
- // 拼接查询url
- var url = 'getReaders.action?date=' + encodeURIComponent(date);
- // 跳转url
- window.location.href = url;
- });
这样,我们就仅仅须要依据传递的日期,在getReader.action中处理请求,展示数据就可以:
图表插件--jqplot交互演示样例的更多相关文章
- AppCan移动应用开发平台新增9个超有用插件(内含演示样例代码)
使用AppCan平台进行移动开发.你所须要具备的是Html5+CSS +JS前端语言基础.此外.Hybrid混合模式应用还需结合原生语言对功能模块进行封装,对于没有原生基础的开发人员,怎样实现App里 ...
- Android网络(3):HttpClient作client,Tomcat Servlet作server的交互演示样例
前面相继介绍了Android网络编程里的Socket传输图片.HttpURLConnection,今天看HttpClient. 第一部分:JavaEE版的Eclipse配置Tomcat [备注:开发后 ...
- Eureka 的 Application Client client的执行演示样例
上篇以一个 demo 演示样例介绍了 Eureka 的 Application Service 客户端角色.今天我们继续了解 Eureka 的 Application Client 客 ...
- 图标插件--jqplot实现柱状图及饼图,表盘图演示样例
柱状图 在jqPlot图表插件使用说明(一)中,我们已经能够通过jqPlot绘制出比較简单的线形图.通过查看源码.我们也能够看出,线形图是jqPlot默认的图表类型: /** * Class: Ser ...
- Grunt经常使用插件及演示样例说明
下述给出了经常使用Grunt插件,并列举了部分插件演示样例: 插件名称 说明 Github地址 grunt-contrib-clean 清空文件和目录 https://github.com/grunt ...
- Androidclient与服务端交互之登陆演示样例
今天了解了一下androidclient与服务端是如何交互的,发现事实上跟web有点类似吧,然后网上找了大神的登陆演示样例.是基于IntentService的 1.后台使用简单的servlet,支持G ...
- JDBC连接MySQL数据库及演示样例
JDBC是Sun公司制定的一个能够用Java语言连接数据库的技术. 一.JDBC基础知识 JDBC(Java Data Base Connectivity,java数据库连接)是一种用 ...
- 构造Scala开发环境并创建ApiDemos演示样例项目
从2011年開始写Android ApiDemos 以来.Android的版本号也更新了非常多,眼下的版本号已经是4.04. ApiDemos中的样例也添加了不少,有必要更新Android ApiDe ...
- JBoss 系列九十九:Rest WebService jBPM 6 集成演示样例
概述 jBPM 6 提供 Rest API 供第三方应用整合使用 jBPM 6,本文演示假设通过 Rest API: 启动流程 获取流程实例信息 启动 User Task 完毕 User Task j ...
随机推荐
- Java 小型学生管理系统心得
这个学生管理系统相对来说比较简单,主要就是复习下java怎么连接数据库,然后你怎么来实现这个功能,我简单的说下思路吧. 首先你要构思好这个界面,他包括增删查改这些基本功能,然后你去分析这些功能都能怎么 ...
- 几种常用的Java数据源解决方案
http://blog.163.com/qqabc20082006@126/blog/static/22928525201041944847653/
- 如何打开Windows Server 2003 内存寻址扩展
本文介绍了如何在系统内存大于4G的情况下,让windows2003 Advanced Server支持大内存的方法: 由于Windows2003 32bit是32位操作系统,当服务器配备内存高达4G时 ...
- C#操作MYSQL遇到0000-00-00日期报错的原因
今天在做一个C#连接MYSQL数据库,并读取数据库的内容,遇到了0000-00-00日期转换报错:unable to convert MySQL date/time value to System.D ...
- 有关Ajax实现的两种方法
首先我们来常见的Jquery式的Ajax写法,以及在java后台的取值 /** *AJAX */ function showLastTime(){ var facilityId = $('*[name ...
- [转]C++ list 类学习笔记
双向循环链表list list是双向循环链表,,每一个元素都知道前面一个元素和后面一个元素.在STL中,list和vector一样,是两个常被使用的容器.和vector不一样的是,list不支持对元素 ...
- php生成短网址的思路与方法
生成短网址的思路以及使用php生成短网址的实现方法. 生成短网址的思路:如果把短网址还原了,你知道是个什么样子的吗?比如:http://www.jbxue.com/sitejs-17300-1.htm ...
- Canvas前端游戏开发——FlappyBird详解
一直想自己做点小东西,直到最近看了本<HTML5游戏开发>,才了解游戏开发中的一点点入门知识. 本篇就针对学习的几个样例,自己动手实践,做了个FlappyBird,源码共享在度盘;也可以参 ...
- 2014年企业改善IT风险管理的5个办法
进入新的一年,企业面对数据泄密事故.日益复杂的攻击和对其控制的持续监管,现在是时候重新审视其风险管理战略了.虽然每个企业都是独特的,风险管理专家认为有些风险管理办法值得企业关注.下面我们列出了5个风险 ...
- 转载:Struts2.3.15.1升级总结
转载网址:http://blog.csdn.net/amosryan/article/details/10350481 由于大家都懂的原因,涉struts2的项目需要将struts2相关包升级至2.3 ...