主体上的addEventListener('mousemove',..)-有多糟糕
addEventListener('mousemove',...) on body - how bad is it?
我有一个巨大的文档,我需要监听这个文档上的所有mousemoves
。我的第一个显而易见的想法是主体上的addEventListener()
,但它可能会引入一些性能问题(您知道,冒泡的东西)。
addEventListener()
-useCapture
中存在一个神秘的参数。我不太了解DOM中事件传播的内部工作原理,但它看起来很有前景。
使用捕获阶段会更好吗?还是不值得?
捕获阶段的工作原理如下:捕获不是从最里面的DOM元素向上向外冒泡,而是从窗口开始并进入。
捕获阶段发生在冒泡阶段之前,因此如果您想在事件到达内部DOM元素之前停止事件的传播,这很方便。
如果不小心做了,这也可能是一个问题。如果您在主体中将mousemove设置为捕获阶段,并出于某种原因停止该事件的传播,那么其他DOM元素将不会再获得mousemove事件。
请参阅Quirksmode上总是很有启发性的帖子:http://www.quirksmode.org/js/events_order.html
jQuery确实弃用了live
,因为冒泡确实需要时间才能到达根(live
放置所有处理程序的位置)。对于小东西来说,这不是问题。但是,如果您有一个深层DOM树或发生了很多事情,那么这将成为一个大问题。jQuery的更好替代品是on
,因为您可以决定处理程序可以连接到树的上(或下)多远。这限制了可以从哪些元素触发事件,以及要弹出的节点数量。
这里更大的问题是什么是对事件的响应,因为mousemove
在移动过程中多次开火。将它绑定到主体意味着每次移动鼠标时,附加到事件的代码都必须激发。您可能希望限制响应事件运行的内容,或者使附加的代码尽可能精简和无阻塞。
- 主体上的addEventListener('mousemove',..)-有多糟糕
- 主体单击删除功能上的输入框宽度
- 如何在AngularJS应用程序的主体上动态设置溢出
- 如何在IE8及以前版本中处理mousemove
- AngularJS-如何在mousemove上存储鼠标坐标
- 我应该/如何清除mousemove JQuery事件侦听器
- 如何使用Javascript或jQuery代码调用mousemove
- 提取没有特定子元素的主体元素
- 'mousemove'画布中的事件侦听器-指针仅在最后一个矩形中更改
- 如何在拖动绑定到“mousedowd,mousemove,mouseup”的锚点时防止重定向
- jQuery UI draggable:绑定到mousemove事件中的对象
- 如何根据主体高度动态更改元素边距顶部
- 正确渲染所需的延迟或指定的主体宽度
- 如何删除/销毁附加到主体的主干视图
- 如何使主体采用等同于 style=“background-color: returnBlue()” 的样式属性,其中 r
- 动态加载引导模式主体
- jQuery动画缩放需要我点击主体
- 从主体分离时,jQuery对象scrollTop(值)
- 如何正确停止mousemove事件
- Box2d 从旋转的主体中获取形状点