0

Web サイトのサンプルのようなパン/ズーム イベントに応答する Protovis グラフがありPanel、グラフを保持する を空のグラフでカバーしています。残念ながら、それは私の基になるグラフが通常応答するすべてのようなものをキャプチャしますEventsmouseovermouseout

これは、すべてのイベントを受け入れるように Panel を設定する必要があるためです。ドキュメントによると、これに有効なパラメーターは「all」、「paint」、および「none」のみです。

vis.add(pv.Panel) .events("all")

Panelズームがこれらのイベントをキャプチャしないようにするにはどうすればよいですか? または、どうすればそれらをそのPanel下に渡すことができますか?

4

1 に答える 1

0

これが必ずしもあなたが望む答えだとは思いませんが、私が知る限り、イベントを下位の要素に渡す簡単な方法はありません。ただし、グラフが例に似ている場合は、次のように、非表示の順序とPanelイベントを受け取るマークの順序を変更するだけで済みます。

vis.add(pv.Dot)
    .event('click', function() { alert("clicked") })
    // ... etc

vis.add(pv.Panel)
    .events("all")
    // ... etc

に:

vis.add(pv.Panel)
    .events("all")
    // ... etc

vis.add(pv.Dot)
    .event('click', function() { alert("clicked") })
    // ... etc

これにより、マークの z オーダーが変更され、ドットがパネルの前にクリック イベントを受け取るようになります。既存のグラフの正しいポイントにパネルを挿入する必要があるため、プラグアンドプレイは少し劣りますが、機能するはずです。

次の例に基づいて jsFiddle を確認できます: http://jsfiddle.net/nrabinowitz/Ctxrr/

編集:以下のコメントによると、このアプローチはズームイベントで問題になる可能性があります。この更新された fiddleに示されているより良いアプローチは、不可視Panelのものを問題のマークの親にすることです。イベントは子から親に自動的にバブルアップし、子がイベントのリスナーを設定しない場合は、親の邪魔にならないように。したがって、イベントを受け取る必要があるすべてのフォアグラウンド マークがパン/ズーム パネルの子である限り、これは機能するはずです。

于 2011-12-05T20:59:29.537 に答える