跟踪jqplot垂直折线图的鼠标位置

时间:2012-09-12 14:40:11

标签: javascript jquery jqplot

我想创建一个jqPlot折线图,它能够在垂直和水平方向之间改变方向。通过旋转包含图表的div元素,我能够使用CSS规则实现这一目的。

我的工作到目前为止:http://jsfiddle.net/GayashanNA/A4V4y/14/

但问题是我还想在翻转方向后跟踪鼠标指针和鼠标点击图表上的点,因为我想要注释这些点。当图表处于垂直方向时,我无法执行此操作。谁能建议一种方法来做到这一点?或者我是以错误的方式解决问题?

(注意:我可以在水平方向上执行此操作,如果您尝试单击上图中的某个点,则可以观察它。)

非常感谢谢谢和帮助。

2 个答案:

答案 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

如果我做错了,请纠正我。

感谢。