我正在尝试在ember.js中实现一个滑块视图;为此我需要捕获mouseMove
事件,即使它离开了第一次收到它的视图。在纯粹的js中我会做这样的事情:
element.addEventListener 'mousemove', ..., true // true means 'capture event'
即使鼠标离开浏览器窗口,也可以在捕获元素上触发事件,这样做会产生很好的副作用,模仿UI控件在本机应用程序中的行为方式。
我似乎无法在ember.js中找到一种方法,但我确定我忽略了一些东西。如果没有,那么推荐的做法是什么?
答案 0 :(得分:2)
不幸的是,处理根元素(通常是EventDispatcher
)上的默认事件处理程序的body
对于将mouseMove
范围设置为除了onDrag
以外的视图没有做任何事情。实际发生的事情。
您可以查看onDragStart
,onDragEnd
和dragStart
(drag
,dragEnd
,body
中的ember用语“事件spec应该在源元素上触发,因此无论它们发生在何处都会触发您的视图。
您可以自己手动将处理程序分配给mouseUp
。在mouseMove
处理程序中添加mouseLeave
和mouseEnter
处理程序,并在mouseUp
(以防止重复)和on
处理程序中删除它们。
最简单的方法是使用$('body').on('mouseMove.custom', $.proxy(this.yourHandler, this));
:
$('body').off('mouseMove.custom')
然后删除:
{{1}}
答案 1 :(得分:1)
查看旧问题的人的更新。现在,组件包含mouseMove
和其他内置事件处理程序,以及添加自定义事件处理程序的能力。
https://guides.emberjs.com/v2.12.0/components/handling-events/
import Ember from 'ember';
export default Ember.Component.extend({
mouseMove() {
//do stuff
}
});