Это должно хорошо работать.Аналогичен принятому ответу (хотя и с использованием jQuery), но флаг isDragging
сбрасывается только в том случае, если новая позиция мыши отличается от позиции на событии mousedown
.В отличие от принятого ответа, это работает в последних версиях Chrome, где mousemove
запускается независимо от того, была ли перемещена мышь.
var isDragging = false;
var startingPos = [];
$(".selector")
.mousedown(function (evt) {
isDragging = false;
startingPos = [evt.pageX, evt.pageY];
})
.mousemove(function (evt) {
if (!(evt.pageX === startingPos[0] && evt.pageY === startingPos[1])) {
isDragging = true;
}
})
.mouseup(function () {
if (isDragging) {
console.log("Drag");
} else {
console.log("Click");
}
isDragging = false;
startingPos = [];
});
Вы также можете настроить проверку координат в mousemove
, если выхочу добавить немного терпимости (то есть рассматривать крошечные движения как щелчки, а не перетаскивания).