5

私は ARCGIS Javascript API を使用しており、形状の頂点のデフォルトの右クリック動作をオーバーライドしようとしています。

ESRI のヘルプでは onVertexClick イベントがリストされていますが、ここからは、これが右クリック イベントか左クリック イベントかを判断する方法がないように見えるため、右クリックだけをオーバーライドすることはできません。 https://developers.arcgis.com/javascript/jsapi/edit.html

[削除] オプションを使用してメニューを表示するのではなく、現在のノード/頂点を削除するように右クリックの動作を設定しようとしています。

編集 これは、ARCGIS API 内に存在する現在のイベントです。

this.eventsList.push(dojo.connect(this._editToolbar, 'onVertexClick', $.proxy(this.addCustomVertexClickEvent, this)));

このイベントは既に API に含まれていますが、左クリックまたは右クリックを判断する方法が返されません。

「クリック イベントをリッスンしてから、MouseEvent オブジェクトのボタン属性をテストする」というコメントは機能しますが、頂点ポイントは ARCGIS API コード内にあるため、頂点ポイントに直接クリック イベントを追加することはできません。

4

3 に答える 3

2

ハッキングせずにこれを行う方法を探している他の人のために。本文で「contextmenu」(右クリック) イベントをリッスンし、「contextmenu」ハンドラーにフラグを設定して、アプリケーションに現在の状態を知らせることができます。「マウスダウン」、「マウスアップ」の組み合わせで「頂点ハンドル」へのクリック イベントをシミュレートします。「頂点クリック」ハンドラーで、「contextmenu」ハンドラーに設定されている右クリック フラグを確認します。

var editToolbar = new Edit(map, options);
var rightClick;

$('body').on('contextmenu', function(e) {
  var target = e.target;
  if(target.tagName === 'circle') {
    // We only care about this event if it targeted a vertex
    // which is visualized with an SVG circle element
    // Set flag for right click
    rightClick = true;
    // Simulate click on vertex to allow esri vertex-click
    // to fill in the data for us
    var mouseDownEvt = new MouseEvent('mousedown', e.originalEvent);
    target.dispatchEvent(mouseDownEvt);
    var mouseUpEvt = new MouseEvent('mouseup', e.originalEvent);
    target.dispatchEvent(mouseUpEvt);
    // Since this event will be handled by us lets prevent default
    // and stop propagation so the browser context menu doesnt appear
    e.preventDefault();
    e.stopPropagation();
  }
});

editToolbar.on('vertex-click', function(e) {
  if(rightClick) {
    // Handle the right click on a vertex
    rightClick = null;
  }
});

于 2016-05-11T16:33:24.560 に答える
1

ESRI から連絡を受けた後、彼らは API でこの詳細を提供していないようで、これはまだ不可能です。

于 2014-11-17T13:52:06.997 に答える