我想创建一个jqPlot折线图,它能够在垂直和水平方向之间改变方向。通过旋转包含图表的div元素,我能够使用CSS规则实现这一目的。
我的工作到目前为止:http://jsfiddle.net/GayashanNA/A4V4y/14/
但问题是我还想在翻转方向后跟踪鼠标指针和鼠标点击图表上的点,因为我想要注释这些点。当图表处于垂直方向时,我无法执行此操作。谁能建议一种方法来做到这一点?或者我是以错误的方式解决问题?
(注意:我可以在水平方向上执行此操作,如果您尝试单击上图中的某个点,则可以观察它。)
非常感谢谢谢和帮助。
答案 0 :(得分:2)
我从未使用过jqPlot,但我想你的问题是尝试使用css rotate(),因为游标插件使用鼠标位置来确定绘制线的位置,并且元素的大小在转换时不会改变通过rotate(),它仍然具有相同的宽度和高度值。
如果你看一下代码,你会看到:
if (c.showVerticalLine) {
c.shapeRenderer.draw(ctx, [[gridpos.x, 0], [gridpos.x, ctx.canvas.height]]);
}
if (c.showHorizontalLine) {
c.shapeRenderer.draw(ctx, [[0, gridpos.y], [ctx.canvas.width, gridpos.y]]);
}
所以看起来这个库总是根据原始元素上的鼠标位置绘制线条,当然,这些线条在被rotate()变换后将与位置不匹配,并且XY坐标将被转换为旋转后的YX() 我会尝试更改原始元素的大小,但我不知道库是否允许您指定要绘制的标签的哪一侧。
答案 1 :(得分:2)
我终于找到了问题的解决方案。但我不得不改变jqPlot库来实现这一目标。为了帮助遇到同样问题的其他人,我会把我的解决方案放在这里。
首先,我必须将以下代码插入到jquery.jqplot.js文件的jqPlot类中,该文件是核心库。
function jqPlot() {
//add the following code segment
var verticallyOriented = false;
this.setVertical = function(state){
verticallyOriented = state;
}
//don't change other code that isn't mentioned here
//now you have to change the logic in the getEventPosition function
//to make sure the new orientation is detected
function getEventPosition(ev) {
//change the line starting with var gridPos = ...
//to the following code segment
//depending on the orientation the event position calculating algorithm is changed
if(verticallyOriented){
var gridPos = {x:ev.pageY - go.top , y:plot.eventCanvas._elem.height() - ev.pageX + go.left};
} else {
var gridPos = {x:ev.pageX - go.left, y:ev.pageY - go.top};
}
//no change to other code is needed
}
}
您可以在此处查看工作示例:http://jsfiddle.net/GayashanNA/yZwxu/
更改库文件的要点:https://gist.github.com/3755694
如果我做错了,请纠正我。
感谢。