关于 title 属性导致触发 mousedown 事件时连带触发 mousemove

简介:

大家都知道,鼠标点击的整个事件的执行流程是:mousedown -> mouseup -> click ,而拖放的整个流程是:mousedown -> mousemove -> mouseup -> click

  可以来看一个正常 demo,可以分别测试点击和拖放动作

  我们试着给 #box 加上title属性再来分别试试点击事件和拖放事件

  可以发现点击也会触发 mousemove 事件,原因就在于 title。

  并且 title 属性有个特性,就是在你鼠标按下的时候,提示文字会隐藏,鼠标抬起则又显示,所以你可以尝试下双击,会发现第 2 次点击会触发 click 事件,因为第 1 次点击后 title 还没有显示出来就进行了第 2 次点击,则正常触发 click 事件。

  发现这一点后,我们就可以试着避免这个小问题,因为在一些情况下,一个对象可能需要同时具备拖放和点击功能,并且保证这两个功能不会冲突。最简单的办法就是避免使用 title 属性,或者你可以参考我在 HoorayOS 里的实现:

  在 mousedown 和 mouseup 时分别记录对象的坐标,并进行对比,如果完全一致则表示对象未进行拖动,否则代表对象已经拖动,这时就可以在 mouseup 里分别处理这两种情况。具体代码可以查看:点击查看

  PS:该问题目前仅在 chrome 下发现有,其他浏览器似乎没有出现。



    本文转自胡尐睿丶博客园博客,原文链接:http://www.cnblogs.com/hooray/archive/2012/11/22/2783349.html,如需转载请自行联系原作者

相关文章
|
7月前
如何让touchmove之后不触发touchend的事件
如何让touchmove之后不触发touchend的事件
38 0
|
9月前
select下拉框选择触发事件
select下拉框选择触发事件
59 0
|
JavaScript
DOM注册事件以及删除事件
注册事件以及删除事件 注册事件(绑定事件) 注册事件也就是给元素添加事件,成为注册事件或者绑定事件。
|
JavaScript
jquery自动触发事件-47
jquery自动触发事件-47
72 0
jquery自动触发事件-47
|
索引
【mpvue】列表项组件事件前10个触发正常,后面的组件触发不正常
1、问题描述 父级列表页,将列表项做成自定义组件ItemList,监听子组件的click事件,获取当前子组件实例所在数组的索引值。 发现前10个子组件实例触发click时,console.log能正确输出该组件所在数组的索引值,但是后续的子组件实例触发click时输出的并非该组件所在数组的索引值。 下面是控制台打印的内容:
80 0
|
前端开发 JavaScript
【BootStrap】关于Select下拉框选择触发事件以及扩展
【BootStrap】关于Select下拉框选择触发事件以及扩展
630 0
【BootStrap】关于Select下拉框选择触发事件以及扩展