うしブログ

うしブログ

趣味で運営する、GeoGebraの専門ブログ。

(作業メモ)StartPoint要検証(2行の場合;テキスト変更時未定義問題)

グラフィックスビュー上のオブジェクトのドラッグ解除を監視する

このアプレットは、点A(0,0)をドラッグして動かした後、ドラッグを解除する(点Aを離す)と、Aが(0,0)に戻るように作られています。

このように、グラフィックスビュー上のオブジェクトのドラッグ解除を監視するには、タッチデバイスならtouchend イベント, マウスデバイスならclick イベントを監視すれば良いです。そのために必要なグローバルJavaScriptは、下記のとおりです。

インストーラ版GeoGebraでは、そもそもdocumentオブジェクトが存在しないため、この方法は使えません。

function ggbOnInit() {
  //起動直後は、canvasが正常に呼び出せないことがあるので、オブジェクト更新時にリスナを登録することにした。
  ggbApplet.registerUpdateListener('initFunc');
}

function initFunc(){
  if (evt){return;} //すでにリスナ登録済みの場合
  var evt = window.ontouchstart===null?'touchend':'click'; 
  var canvasIndex = getGvIndex();
  var canvas = document.getElementsByTagName('canvas')[canvasIndex];
  canvas.addEventListener(evt,usiFunc);
}

//canvasタグ配列における、グラフィックスビューのindexを取得
function getGvIndex(){
  var canvases = document.getElementsByTagName('canvas');
  for(k=0; k<canvases.length; k++){
    if(canvases[k].innerHTML!=''){
      return k;
    }
  }
}

function usiFunc(){
  console.log('done.');
  ggbApplet.evalCommand('If[A!=(0,0),SetValue[A,(0,0)]]');
}