0

getPosition 内で x と y を使用する残りのコードを記述する必要がないように、"getPosition" によって計算された座標を他の関数で使用できるようにしたいと考えています。

return {posX: x, posY: y}; のようなものを使用できることはわかっています。関数から両方の値を取得しますが、getPosition の外でそれらを使用できるようにする方法がわかりません。

document.addEventListener("DOMContentLoaded", init, false);

  function init()
  {
    var canvas = document.getElementById("canvas");
    canvas.addEventListener("mousedown", getPosition, false);
  }

   function getPosition(event)
  {
    var x = new Number();
    var y = new Number();
    var canvas = document.getElementById("canvas");

    if (event.x != undefined && event.y != undefined)
    {
      x = event.x;
      y = event.y;
    }
    else // Firefox method to get the position
    {
      x = event.clientX + document.body.scrollLeft +
          document.documentElement.scrollLeft;
      y = event.clientY + document.body.scrollTop +
          document.documentElement.scrollTop;
    }

    x -= canvas.offsetLeft;
    y -= canvas.offsetTop;

  }
4

1 に答える 1

3

クロージャーを作成し、変数 x と y とそれらを使用する関数をそこに置きます。

(function(){
  var _x = 0;
  var _y = 0;

  document.addEventListener("DOMContentLoaded", init, false);

  function init()
  {
    var canvas = document.getElementById("canvas");
    canvas.addEventListener("mousedown", getPosition, false);
  }

   function getPosition(event)
  {
    var x = new Number();
    var y = new Number();
    var canvas = document.getElementById("canvas");

    if (event.x != undefined && event.y != undefined)
    {
      x = event.x;
      y = event.y;
    }
    else // Firefox method to get the position
    {
      x = event.clientX + document.body.scrollLeft +
          document.documentElement.scrollLeft;
      y = event.clientY + document.body.scrollTop +
          document.documentElement.scrollTop;
    }

    x -= canvas.offsetLeft;
    y -= canvas.offsetTop;

    //Save x and y for later
    _x = x;
    _y = y;
  }
})();
于 2013-11-08T20:18:35.827 に答える