2

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

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

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

(注意:我可以在水平方向上做到这一点,如果您尝试单击上图中的一个点,您可以观察它。)

非常感谢和帮助。

4

2 回答 2

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

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

谢谢。

于 2012-09-20T13:00:29.203 回答
2

我从来没有使用过 jqPlot,但我猜你的问题是尝试使用 css 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]]);
}

所以看起来图书馆总是根据鼠标位置在原始元素上绘制线条,这当然不会匹配旋转()转换后的位置,并且旋转后XY坐标将转换为YX ()。
我会尝试更改原始元素的大小,但我不知道库是否允许您指定要在哪一侧绘制标签。

于 2012-09-12T15:44:37.650 回答