拖动时的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中,这完美地工作,在我自己的代码中它没有,所以我正在倾听mouseup
和dragend
以确定。
似乎不会触发mouseup事件,因为当您释放左键时鼠标已离开链接。
来自http://www.quirksmode.org/js/events_mouse.html :
假设用户按下链接上的鼠标按钮,然后将鼠标移离链接,然后释放鼠标按钮。 现在链接只注册一个mousedown事件。
也许你可以这样做来解决:
- 为链接注册mousedown事件
- 注册整个文档的mouseup事件
- 当链接触发
mousedown
事件,然后文件firemouseup
事件,你可以认为该链接是触发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 ?