2

我能够使用选择插件来选择我的绘图区域并放大。

现在我希望能够在选择缩放和鼠标滚轮缩放+平移之间切换。

作为测试,我想在选择并放大某些内容后立即禁用选择,同时使用鼠标滚轮激活平移和缩放。

我可以使用 设置选项getOptions(),但无法更改选择/缩放/平移。我检查了选项对象,它确实改变了(interactive = true)。我用 重新绘制绘图draw(),但选择/缩放/平移没有改变。

该代码将让我选择和缩放,但就是这样:

$("#chart1").bind("plotselected", function (event, ranges) {
    var o=plot.getOptions();
    o.xaxes[0].min = ranges.xaxis.from;
    o.xaxes[0].max = ranges.xaxis.to;
    o.yaxes[0].min = ranges.yaxis.from;
    o.yaxes[0].max = ranges.yaxis.to;
    // block 1: not working as expected, although the options object does change                                                                                                                                                                     
    o.pan.interactive = true;
    o.zoom.interactive = true;
    o.selection.mode = null;
    // block1 end                                                                                                                                                                                
    plot.setupGrid();
    plot.draw();
    plot.clearSelection();
}

我究竟做错了什么?

4

3 回答 3

3

我不知道如何解决这个问题,所以相反,我决定同时保留zoom.interactive = trueselection.mode = "xy"

对于平移,我在绘图的一侧添加了 4 个按钮(如导航插件示例中的箭头)。虽然用鼠标平移真的很酷,但无论如何用户都必须在模式之间切换(缩放+平移或选择缩放)。

虽然这不是我的问题的答案,但如果其他人正在寻找一种选择/缩放/平移的方法,这个解决方案将起作用。

于 2013-10-03T23:12:46.833 回答
2

为了在 Flot 0.8.2 中进行这项工作,我对 2 个插件进行了小修改。

function onDragStart(e)jquery.flot.navigate.js 中,更改

if (e.which != 1)  // only accept left-click

if (e.which != 1 || !plot.getOptions().pan.interactive)  // only accept left-click

function onMouseDown(e)在 jquery.flot.selection.js 中,更改

if (e.which != 1)  // only accept left-click

if (e.which != 1 || !plot.getOptions().selection.mode)  // only accept left-click

在启用两个选项的情况下初始化您的绘图,否则事件处理程序将不会被禁用选项绑定。然后禁用其中一个选项。

var plot = $.plot ($("#chart1"), data, {selection:{mode:"xy"}, pan:{interactive:true}});
plot.getOptions().selection.mode = null;

如果我修改了 Flot 代码以绑定和取消绑定事件处理程序会更好,但这更简单。

于 2014-01-07T19:41:25.383 回答
0

我找到了一个很好的解决方案:使用当前数据和选项再次绘制绘图。

plot = $.plot("#flotplaceholder",data, options);

//更改选项以启用/禁用平移/选择

            var theOptions = plot.getOptions();
            if (actionMode == "pan"){
                theOptions.pan.interactive = true;
                theOptions.selection.mode = null;
            }else if(actionMode == "select"){
                theOptions.pan.interactive = false;
                theOptions.selection.mode = "xy";
            }

// 重绘绘图

plot = $.plot("#flotplaceholder", plot.getData(), theOptions);

希望有帮助

于 2017-04-28T09:45:21.563 回答