javascript - 一种跟踪和使用顺序点击的方法

标签 javascript

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

$(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;
  }

});

最佳答案

我可能会选择委托(delegate)模式:

var lastNodeClicked = null;

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

除了重置上次点击的节点之外,还可以无条件地用点击的节点更新它;这样您就可以用更少的点击次数绘制线条;-)

关于javascript - 一种跟踪和使用顺序点击的方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13747061/

相关文章:

javascript - 基于单选按钮选择的 jQuery DatePicker 更新选项

javascript - AngularJS - 带有 "key.key.key..value"的动态 ngModel

javascript - 如何在同一项目中为 java 和 javascript 配置 Sonarqube 扫描器

javascript - 使用 Kenwheeler slick carousel 的问题

javascript - Jquery 图像循环问题

javascript - 如何改进我的backbone.js搜索功能?

c# - 请修改代码,它给出错误: functionRemainCount() 在当前上下文中不存在?

javascript - 将多个表单数据传递给 PHP Controller

javascript - 如何在 Clojure 中编写一个保持状态的闭包?

javascript - 我如何在 Angular JS 中获取基本主机