4

jQueryアコーディオン内にグラフをプロットしたいのですが、グラフが切り刻まれ、スケールが表示されます。誰かがこれを修正しましたか?

4

3 に答える 3

6

jqPlot のタブとアコーディオン UI ウィジェットのページで説明されているように、jqPlot はプロット時にチャートのサイズを知る必要があり、チャートがアコーディオンまたはタブによって非表示になっている場合はそれができません。解決策は、別の方法でグラフのディメンションを指定するかreplot、アコーディオンが展開されたときに呼び出すことです。詳細とサンプル コードについては、タブとアコーディオンの UI ウィジェットを参照してください。

于 2010-11-06T01:18:52.263 に答える
3

アコーディオン内のすべては、展開されるまで隠されています。つまり、アコーディオンは無次元です。アコーディオン チャートが含まれている DOM の部分が表示されるまで待ってから、グラフをプロットする必要があります。jqPlot の最新リリースに含まれている ui.html の例を見ると、次のように表示されます。

ここでは、非表示の jQuery UI タブ内にある chart1 という名前の div にプロットが作成されます。

plot1 = $.jqplot('chart1', [l1, l2, l3],  {
  title: "I was hidden",
  lengend:{show:true},
  series:[{},{yaxis:'y2axis'}, {yaxis:'y3axis'}],
  cursor:{show:true, zoom:true},
  axesDefaults:{useSeriesColor:true}
});

そして、イベント ハンドラーは、jQuery UI タブによって発生する「tabsshow」イベントに登録されます。あなたの場合、アコーディオンの状態の変更が完了すると、jQuery UI アコーディオン ウィジェットによって発生する 'accordionchange' イベントのハンドラーを登録する必要があります。上記のコード例で、タブの「tabsshow」イベントにバインドする方法は次のとおりです。

$('#tabs').bind('tabsshow', function(event, ui) {
  if (ui.index == 1 && plot1._drawCount == 0) {
    plot1.replot();
  }
  else if (ui.index == 2 && plot2._drawCount == 0) {
    plot2.replot();
  }
});

同じ ui.html ファイルに、アコーディオンを使用した実際の例もあります。この例は、bitbucket の最新リリースjqplot.1.0.0a_r701にあります。

また、同じ div で複数の jqPlot オブジェクトをインスタンス化しないように注意してください。そうしないと、プロットが重なり合ってブラウザに過負荷がかかります。

于 2011-03-13T08:19:34.093 に答える
1

タブやアコーディオン要素などの非表示要素にはサイズがないため、jqplot のドキュメントに記載されている手法を使用することをお勧めします。

  1. 別の方法でグラフの寸法を提供する (例: data-height および data-width 属性) AND
  2. グラフが表示されたら、replot() を呼び出します。

ただし、ドキュメントの例では、jquery-ui のバージョンによっては正しくないイベント名が使用されています。たとえば、Bootstrap 3 を使用する場合、適切なイベントの名前は「shown.bs.tab」とは異なります。

リンク:

于 2015-07-05T23:29:49.803 に答える