jQuery - don't fire 'click' on 'mousemove
jQuery - don't fire 'click' on 'mousemove'
我创建了一个Fiddle来演示我的情况。
我不想在用户平移时触发点击事件——只有当它只是一个简单的点击时。我尝试过.of()和.on()的不同位置,但都没有成功。
提前感谢您的帮助。
http://jsfiddle.net/Waxen/syTKq/3/
更新你的小提琴,做你想做的事。我将事件的重新绑定置于超时状态,这样它就不会立即触发,并将鼠标移动调整为
在点击事件中,您可以检测鼠标是按向下还是按向上。让我们分析一下:
DRAG:
mouse down
mosue position changes
mouse up
CLICK:
mouse down
mouse up
您可以看到-差异是更改了鼠标位置。您可以用鼠标记录点击坐标,然后在muse返回时进行比较。如果在某些trehold内,则操作是单击
我添加了一个"平移"bool来解决您的问题:
参见http://jsfiddle.net/syTKq/4/
基本上,如果用户有mousedown和mousemove,那么平移是真的。一旦鼠标向上平移为false。如果只是鼠标向下移动,则平移为false,因此缩放。
此解决方案解决了您的问题:
var bClicking = false,
moved = false;;
var previousX, previousY;
var $slider = $('#slider'),
$wrapper = $slider.find('li.wrapper'),
$img = $slider.find('img.foo');
$img.on('click', function()
{
if(!moved)
{
doZoom();
}
});
$wrapper.mousedown(function(e) {
e.preventDefault();
previousX = e.clientX;
previousY = e.clientY;
bClicking = true;
moved = false;
});
$(document).mouseup(function(e) {
bClicking = false;
});
$wrapper.mousemove(function(e) {
if (bClicking)
{
moved = true;
var directionX = (previousX - e.clientX) > 0 ? 1 : -1;
var directionY = (previousY - e.clientY) > 0 ? 1 : -1;
$(this).scrollLeft($(this).scrollLeft() + 10 * directionX);
$(this).scrollTop($(this).scrollTop() + 10 * directionY);
previousX = e.clientX;
previousY = e.clientY;
}
});
function doZoom() {
$img.animate({
height: '+=300',
width: '+=300'
}, 500, function() {
//animation complete
});
}
基本上,只有当鼠标没有在mousedown
和mouseup
事件之间移动时,它才会调用doZoom()
。
您可以使用mousemove
/mousedown
事件来设置一个标志,该标志可以在click
事件处理程序中使用,以确定用户是在单击还是平移。类似于:
//set a flag for the click event to check
var isClick = false;
//bind to `mousedown` event to set the `isClick` flag to true
$(document).on('mousedown', function (event) {
isClick = true;
//bind to `mousemove` event to set the `isClick` flag to false (since it's not a drag
}).on('mousemove', function () {
isClick = false;
//bind to `click` event, check to see if the `isClick` flag is set to true, if so then this is a click, otherwise this is a drag
}).on('click', function () {
if (isClick) {
console.log('click');
} else {
console.log('drag');
}
});
下面是一个演示:http://jsfiddle.net/SU7Ef/
相关文章:
- 使用 jQuery 的 .on 函数如何获取事件的原始元素
- 主体上的addEventListener('mousemove',..)-有多糟糕
- I'我设计了一个下拉菜单,onclick会出现,而on blur会消失
- window.on.scroll事件未启动
- Socket.io on Mozilla Rhino
- CSS中的游标属性似乎不适用于USB On The Go
- jQuery点击ON现在使用.load触发关闭
- JQuery.on(“keydown”)追加到页面时不工作
- 使用.on动态添加jquery/js不知道的html元素
- angularjs$valid-on-dates在firefox中报告错误
- addEventListener on NodeList
- 当我在节点上拖动鼠标时,我如何防止使用d3.ehavior.zoom().on(“缩放”,重绘)
- jQuery 1.7.2:.on()在一个页面上工作;Don’别再干别的了
- Jquery on单击“显示信息”
- 平均值.on(事件[,选择器][,数据],处理程序)
- 多个jQuery.on()事件无法运行xBrowser(取决于顺序)
- 如何使jQuery的“bind”或“on”事件处理程序幂等
- 无法使以下ng on click outside指令在同一页面上的两个元素上工作
- .fadeIn() / fadeOut() on mousemove
- jQuery - don't fire 'click' on 'mousemove