拖动时的mouseUp事件

我有一个链接,它有mousedown和mouseup处理程序来动画页面上的一些对象。 当拖动(拖放)链接触发mousedown事件但它在释放时不会触发mouseup。 有这个问题的解决方法吗?

这是一个例子,如果你正常点击链接它可以工作但是当你拖动链接鼠标时不会发生:

http://jsfiddle.net/hL3mg/1/

处理拖拽

在这里没有人提到的关键是,实际上一个事件可以记录拖拽的结束,正如其他答案所解释的那样,这里发生了什么。 该事件被称为dragend ,所以你可以简单地做

 $("a").on("dragend",function(){ console.log("Drag End"); }); 

注册拖动的结尾。 这样做的缺点是你仍然会看到一个拖拽界面(换句话说:浏览器会显示一些UI来通知用户他的拖拽)。

注册鼠标

然而,还有一种方法可以注册所需的鼠标,只需通过在click事件监听器中return false来取消拖动行为,然后在document上注册mouseup

 $("a").mousedown(function(){ console.log("Mouse Down"); return false; }); $(document).mouseup(function(){ console.log("Mouse Up"); }); 

我觉得我必须做的唯一一句话是,在一个独立的jsfiddle中,这完美地工作,在我自己的代码中它没有,所以我正在倾听mouseupdragend以确定。

似乎不会触发mouseup事件,因为当您释放左键时鼠标已离开链接。
来自http://www.quirksmode.org/js/events_mouse.html :

假设用户按下链接上的鼠标按钮,然后将鼠标移离链接,然后释放鼠标按钮。 现在链接只注册一个mousedown事件。


也许你可以这样做来解决:

  1. 为链接注册mousedown事件
  2. 注册整个文档的mouseup事件
  3. 当链接触发mousedown事件,然后文件fire mouseup事件,你可以认为该链接是触发mouseup事件

我所做的就是将“mouseOut”事件与每个链接相关联,并检查是否有任何链接被按下。 如果是这样,mouseOut将修复链接的定位。 这是代码:

 var mouse_button = false; $('a') .mousedown(function(){ $(this).css('top', '+=2'); mouse_button = true; }) .mouseup(function(){ $(this).css('top', '-=2'); mouse_button = false; }) .mouseout(function(){ if (mouse_button) { $(this).css('top', '-=2'); mouse_button = false; } }); 

你所描述的是有意识的设计。

一直以来的意图是,如果你鼠标按下链接,按钮,无论如何都要改变你的想法,你可以将光标移离链接或按钮,然后释放鼠标按钮和动作 – 链接,按钮,什么 – 不会发生。

根据设计,如果在鼠标向上移动光标之前将鼠标向上移动,则鼠标向上不会被发送到接收鼠标的对象。

这是用户界面设计考虑因素。 这就是为什么你应该编程,只需点击一下即可启动任何操作 – 而不仅仅是鼠标按下。

我告诉你,有时你可能想要对鼠标进行操作,例如在拖动时,但它是例外,当正确完成时,将会看到鼠标向上 – 除了在某些版本的IE中鼠标时如果将光标拖离页面 – 向上,向左或向右,将丢失。

如果你想移动东西并且能够看到鼠标,那么使用分区或链接之类的东西要好得多。

链接只是为了:链接到某些东西。 是的,您可以编写在单击链接时执行的JavaScript代码 – href =“javascript:someFunction();” 或者您可以编写onclick来执行某些操作,甚至可以将鼠标向下移动。 但是,该链接旨在做一些不被拖延的事情。

使用除法或跨度并移动它。

短发

如果仔细观察浏览器的作用,它会“拖动”DOM对象,在我的情况下是一个链接,在释放后,鼠标事件不会触发DOM对象(鼠标下方,拖动时)或文档(它没有似乎泡沫了。

添加draggable="false" attr帮助……

 link 

但是,仍然存在用户使用光标突出显示/选择某些内容并拖动所选元素的问题。

使用mouseout事件也有帮助。

如果你需要在jQuery中处理拖动,为什么不使用Draggable ?