如何在jQuery中绑定多个顺序事件?

时间:2012-11-26 18:49:32

标签: jquery

我希望能够使用jquery绑定多个顺序事件。我想做以下事情:

  

点击div1 - 又名mousedown事件 -   现在,如果你在按下鼠标的同时开始移动鼠标,那么就要做一些功能。

最顺利的做法是什么?只是将if置于.on()来电之内,还是有更简单的东西?

1 个答案:

答案 0 :(得分:5)

您可以使用.on().off()来实现此目标。

var $div = $("div");

var mousemove = function() { ... };

$div.on({
  mousedown: function() {
    $div.on("mousemove", mousemove);
  },
  mouseup: function() {
    $div.off("mousemove", mousemove);
  }
});​

请注意,.on().off()是分别绑定和取消绑定事件的推荐方法。

You can check a live example.


更新

或者,您可以将mouseup事件绑定到document。这样,即使在悬停元素时没有发生鼠标,也可以检测鼠标的释放。

var $document = $(document);
var $div = $("div");

var mousemove = function() { ... };

$div.mousedown(function() {
  $div.on("mousemove", mousemove);
})

$document.mouseup(function() {
  $div.off("mousemove", mousemove);
});​

另外,它的简写功能。我们称之为.drag()

$.fn.drag = function(fn) {
  var $document = $(document);
  return $(this).each(function() {
    var self = this;
    var $this = $(this);
    var mousemove = function() {
      fn.dragging && fn.dragging.call($this);
    };
    $this.mousedown(function() {
      fn.start && fn.start.call($this);
      fn.dragging && $this.on("mousemove", mousemove);
    });
    $document.mouseup(function() {
      fn.dragging && $this.off("mousemove", mousemove);
      fn.stop && fn.stop.call(self);
    });
  });
};

$("div").drag({
  start: function() { ... },
  dragging: function() { ... },
  stop: function() { ... }
});​

You can see it live here.