博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
使用 RGraph(HTML5) 绘制折线图(三)
阅读量:6527 次
发布时间:2019-06-24

本文共 6221 字,大约阅读时间需要 20 分钟。

贴出代码

function showRGraph(canvasId, jsonResult, colorIndexs) {                    // 根据选中的颜色绘制折线图    if (jsonResult == null) return;    RGraph.Clear(document.getElementById(canvasId));                      // 由于RGraph采用动态重绘技术,所以先清理掉前一次的遗留  // 获取jsonResult真正长度    length = 0;    for (i = 0; i < jsonResult.length; i++) {        if (jsonResult[i] != null) {            length++;        }    }    jsonResult.length = length;   // 获取颜色    var selectedColors = new Array();    var colors = ['aqua', 'lime', 'silver', 'maroon', 'teal', 'blue', 'navy', 'fuchsia', 'olive', 'yellow', 'gray', 'purple', 'green', 'red'];    if (colorIndexs == null) {        for (i = 0; i < jsonResult.length; i++) {            selectedColors.push(colors[i % colors.length]);        }    }    else {        selectedColors = new Array();        for (i = 0; i < jsonResult.length; i++) {            selectedColors.push(colors[colorIndexs[i] % colors.length]);        }    }    var allDatas = new Array();    var allLabels = new Array();    var allTooltips = new Array();    var allKeys = new Array();    for (i = 0; i < jsonResult.length; i++) {        allKeys.push(jsonResult[i].DataTitle);        var labels = new Array();        var datas = new Array();        var tooltips = new Array();        for (var j = 0; j < jsonResult[i].DataList.length; j++) {            if (i == 0) {                allLabels.push(jsonResult[i].DataList[j].DataTime.format("yyyy-MM-dd"));            }            datas.push(jsonResult[i].DataList[j].Value);            tooltips.push(jsonResult[i].DataTitle + "
" + jsonResult[i].DataList[j].DataTime.format("yyyy-MM-dd") + "
" + jsonResult[i].DataList[j].Value); } allDatas.push(datas); allTooltips.push(tooltips); } if (!window["line_" + canvasId]) window["line_" + canvasId] = new RGraph.Line(canvasId, allDatas); var line1 = window["line_" + canvasId]; line1.Set('chart.key', allKeys); line1.Set('chart.key.position', 'gutter'); line1.Set('chart.key.position.gutter.boxed', false); line1.Set('chart.colors', selectedColors); line1.Set('chart.labels', allLabels); line1.Set('chart.events.click', myClick); line1.Set('chart.tooltips', allTooltips); line1.Set('chart.linewidth', 2); line1.Set('chart.key.position', 'gutter'); line1.Set('chart.key.position.gutter.boxed', false); line1.Set('chart.tickmarks', 'circle'); line1.Set('chart.shadow', true); line1.Set('chart.shadow.offsetx', 1); line1.Set('chart.shadow.offsety', 1); line1.Set('chart.shadow.blur', 3); line1.Set('chart.hmargin', 15); line1.Set('chart.gutter.bottom', 45); line1.Set('chart.background.grid.vlines', false); line1.Set('chart.title.vpos', 0.65); line1.Set('chart.title.hpos', 0.2); line1.Set('chart.text.angle', 30); line1.Set('chart.text.size', 8); line1.original_data = allDatas;                                  // 同上文注释,防止动态重绘之前数据的折线图 line1.Draw();}
function myClick(e, line) {                                       // 若触发,动态生成一div,显示所有人成绩以及排名
  // 每次触发,需先将上次生成的div清理
var bb = document.getElementById("divRGraphDetailTable");                        if (bb != null) {        bb.parentNode.removeChild(bb);    }    var info;    var finalInfos = "";    var datas = eval(line[0].id + "JsonObj");    var infos = new Array(datas.length);    var dataIndex = line.dataset;    var dateIndex = line.index_adjusted;    var thisValue = datas[dataIndex].DataList[dateIndex].Value;    var ranking = 1;    var realCount = 1;    infos[0] = datas[dataIndex].DataList[dateIndex].DataTime.format("yyyy-MM-dd") + "
";··// DataTime具体见最后一篇 // 排名 for (var i = 0; i < datas.length; i++) { ranking = 1; thisValue = datas[i].DataList[dateIndex].Value; if (thisValue != null) { realCount++; for (var j = 0; j < datas.length; j++) { if (datas[j].DataList[dateIndex].Value > thisValue) { ranking++; } } info = "   &nbsp第" + ranking + "名" + ": " + datas[i].DataTitle + ", " + datas[i].DataList[dateIndex].Value + "    " + "
"; infos[ranking] = info; } } for (var i = 0; i < realCount; i++) { finalInfos += infos[i]; } var div = document.createElement('div'); div.id = "divRGraphDetailTable"; div.style.fontSize = "6px"; div.style.background = "aqua"; div.style.border = "solid 1px black"; div.style.zIndex = 10; div.innerHTML = "

" + finalInfos + "

"; var left = e.clientX; var top = e.offsetY; var parentItem = document.getElementById(e.target.id).parentElement; div.style.position = "absolute"; div.style.marginLeft = (left) + "px"; div.style.marginTop = (top - parentItem.clientHeight * 20 / 21) + "px"; parentItem.appendChild(div);     // 以下添加一个关闭div的按钮 var close = document.createElement('close'); close.id = "test1"; close.style.fontSize = "16px"; close.innerHTML = "×"; close.style.zIndex = 11; close.style.position = "absolute"; if (navigator.userAgent.indexOf("MSIE") > 0) { close.style.marginLeft = (0 + div.clientWidth - 20) + "px"; } else if (isFirefox = navigator.userAgent.indexOf("Firefox") > 0) { close.style.marginLeft = (0 + div.clientWidth / 2 - 20) + "px"; } else { close.style.marginLeft = (0 + div.clientWidth - 20) + "px"; } close.style.marginTop = (0 - div.clientHeight) + "px"; div.appendChild(close); close.onmousemove = function () { close.style.cursor = "pointer"; } close.onmousedown = function () { var bc = document.getElementById("divRGraphDetailTable"); if (bc != null) { bc.parentNode.removeChild(bc); } }}

值得注意的有clientX, offsetX区别,最重要的是自己尝试

概念(来源于网络):

clientX 设置或获取鼠标指针位置相对于当前窗口的 x 坐标,其中客户区域不包括窗口自身的控件和滚动条。

clientY 设置或获取鼠标指针位置相对于当前窗口的 y 坐标,其中客户区域不包括窗口自身的控件和滚动条。
offsetX 设置或获取鼠标指针位置相对于触发事件的对象的 x 坐标。
offsetY 设置或获取鼠标指针位置相对于触发事件的对象的 y 坐标。
screenX 设置或获取获取鼠标指针位置相对于用户屏幕的 x 坐标。
screenY 设置或获取鼠标指针位置相对于用户屏幕的 y 坐标。
x 设置或获取鼠标指针位置相对于父文档的 x 像素坐标(亦即相对于当前窗口)。
y 设置或获取鼠标指针位置相对于父文档的 y 像素坐标(亦即相对于当前窗口)。

可参见

还有IE的marginLeft是从div的左上角开始算的,而FireFox是从中上方开始算的,所以应该分类讨论

 

下一篇,扫尾

转载于:https://www.cnblogs.com/studyhs/archive/2012/07/30/2614721.html

你可能感兴趣的文章
创建Visual Studio项目模版向导的几篇参考文章
查看>>
深入浅出SQL Server Replication第一篇:走近Replication(上)
查看>>
[TopCoder][SRM] SRM 562 DIV 2
查看>>
SQLSERVER是怎麽通过索引和统计信息来找到目标数据的(第一篇)
查看>>
简明 Vim 练级攻略 | 酷壳 - CoolShell.cn
查看>>
LocalAlloc,VirtualAlloc,malloc,new的异同
查看>>
回调函数
查看>>
win7 x64 jdk1.7.0_51
查看>>
45 Useful Oracle Queries--ref
查看>>
这些开源项目,你都知道吗?(持续更新中...)[原创]
查看>>
linux中利用iptables+geoip过滤指定IP
查看>>
在myeclipse中写sql语句的细节问题
查看>>
使用ShellExecute打开目标文件所在文件夹并选中目标文件
查看>>
Lombok简化Java代码的好工具
查看>>
HDU 4614 Vases and Flowers (2013多校2 1004 线段树)
查看>>
Minix中的字符判定ctype.c
查看>>
91平台iOS接入demo
查看>>
五个优秀的硬盘检测工具
查看>>
用js实现table内容从下到上连续滚动
查看>>
基于ffmpeg的流媒体服务器
查看>>