2013-10-02 54 views
2

我能夠使用選擇插件來選擇我的地塊的一個區域並放大。如何取消激活選擇並激活Flot中的縮放/平移?

現在我希望能夠在選擇縮放和鼠標滾輪縮放+平移之間切換。

作爲一項測試,我想在選擇某物並放大時立即禁用選擇,同時用鼠標滾輪激活平移和縮放。

我可以使用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(); 
} 

我在做什麼錯?

回答

3

我想不出如何解決這個問題,所以我決定離開zoom.interactive = trueselection.mode = "xy"

對於平移,我在圖的一側添加了4個按鈕(如導航插件示例中的箭頭)。雖然用鼠標平移非常酷,但用戶不得不在模式(縮放+平移或選擇縮放)之間切換。

雖然這不是我的問題的答案,但如果其他人正在尋找一種選擇/縮放/平移的方式,此解決方案將起作用。

+0

怎麼樣,您對anwswer得到?沒有工作? – diegoaguilar

+0

如果你看日期,其他答案發佈於2014年1月,我在2013年10月發佈了這個答案,幾個月前... –

2

爲了在Flot 0.8.2中做這項工作,我對2個插件進行了小小的修改。

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

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

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

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

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代碼來綁定和解除綁定事件處理程序,會更好,但這更簡單。

+0

感謝您分享這個解決方案!對不起,我花了這麼長時間回覆,我正在做其他項目,並忘記了這一個。我試過你的解決方案,但它對我沒有用。只有平移響應,但效果不佳。你不應該也激活放大繪圖選項嗎?否則,你如何放大? –

+0

是的,你需要添加'zoom.interactive = true'。我把注意力放在棘手的部分:在平移和選擇之間進行切換。縮放應該是微不足道的。 –

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); 

希望它能幫助