javascript - 如何返回事件监听器调用的函数的值?

标签 javascript function return coordinates addeventlistener

我希望“getPosition”计算出的坐标可用于其他函数,这样我就不必编写在 getPosition 中使用 x 和 y 的其余代码。

我知道我可以使用类似 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;

  }

最佳答案

创建一个闭包并将变量 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;
  }
})();

关于javascript - 如何返回事件监听器调用的函数的值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19867780/

相关文章:

javascript - coffeescript 类中的范围

javascript - JQuery 移动动态 ListView API

javascript - 如何将页面模板拆分为单独的组件,每个组件都查询数据?

r - R 中的奇数 POSIXct 函数行为

actionscript-3 - 从 Switch Case 返回值时出错?

javascript - 同步 Async Redux 操作以进行乐观提取

c++ - 带有&符号的函数原型(prototype)是什么意思?

function - Dart:函数的参数表示法

java - catch block 方法中的递归调用返回值

c++ - C 与 C++ 函数问题