我想用jquery绑定多个连续事件。我想要实现以下功能:
点击 - 即mousedown事件 - 现在,如果你在按下鼠标的同时开始移动鼠标,则执行某些函数。
最顺畅的方法是什么?只需在.on()调用中放置一个if,还是有更简单的方法?
点击 - 即mousedown事件 - 现在,如果你在按下鼠标的同时开始移动鼠标,则执行某些函数。
最顺畅的方法是什么?只需在.on()调用中放置一个if,还是有更简单的方法?
var $div = $("div");
var mousemove = function() { ... };
$div.on({
mousedown: function() {
$div.on("mousemove", mousemove);
},
mouseup: function() {
$div.off("mousemove", mousemove);
}
});
.on()
和.off()
方法分别绑定和解绑事件。
或者,您可以将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() { ... }
});
mousemove
事件命名为类似于mousemove.myAction
的名称,以避免与其他可能已附加的侦听器发生冲突;特别是因为这是一个动态附加/移除的事件侦听器。 - mačekmouseup
事件可能会出现问题。最好在document.mouseup
或类似的位置解除绑定。 - Yoshi.off()
中包含, mousemove
,这样只有该函数将从mousemove
事件中解绑。直接使用.off(mousemove)
将从该事件中解绑每个函数,这可能会在与多个开发人员合作时导致严重问题。 - Cory Danielson