Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/multithreading/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 一种跟踪和使用连续点击的方法_Javascript - Fatal编程技术网

Javascript 一种跟踪和使用连续点击的方法

Javascript 一种跟踪和使用连续点击的方法,javascript,Javascript,我想通过单击第一个元素,然后单击第二个元素来定义两个dom元素之间的关系(在我的特殊情况下,在to节点之间绘制线)。以下是我的方法。我不认为它特别优雅或干净。有更好的方法吗 $(function() { var State = { initialClick: false, // tracks clicks status for drawing lines initialID: undefined // remember data gotten from the f

我想通过单击第一个元素,然后单击第二个元素来定义两个dom元素之间的关系(在我的特殊情况下,在to节点之间绘制线)。以下是我的方法。我不认为它特别优雅或干净。有更好的方法吗

$(function() {

   var State = {
      initialClick: false, // tracks clicks status for drawing lines
      initialID: undefined // remember data gotten from the first click
   };

   ...

   $map.on('click', '.node', function() {

     var $this = $(this),
         currentID = $this.attr('data-id');

     if (State.initialClick) {
        if (State.initialID === currentID) {
           // process first click
        } else {
           // process second click
        }

        resetClickTracking();
     } else {
        setState(currentID);
     }
  });

  ...


  function setState(id) {
     State.initialClick = true;
     State.initialID = id;
  }

  function resetState() {
     State.initialClick = false;
     State.initialID = undefined;
  }

});

我可能会选择委托模式:

var lastNodeClicked = null;

$map.on('click', '.node', function() {
    if (lastNodeClicked && lastNodeClicked !== this) {
        // draw line
        lastNodeClicked = null; // reset
    } else {
        lastNodeClicked = this;
    }
});

您也可以使用单击的节点无条件地更新它,而不是重置上次单击的节点;这样,您可以用较少的单击来绘制线;-)

我可能会选择委托模式:

var lastNodeClicked = null;

$map.on('click', '.node', function() {
    if (lastNodeClicked && lastNodeClicked !== this) {
        // draw line
        lastNodeClicked = null; // reset
    } else {
        lastNodeClicked = this;
    }
});

您也可以使用单击的节点无条件地更新它,而不是重置上次单击的节点;这样,您可以用较少的单击来绘制线;-)

那肯定比我的高一步。在给出答案之前,我会看看是否还有其他建议。这肯定比我的建议高出一步。在给出答案之前,我会看看是否还有其他建议。