2

我正在尝试在 ember.js 中实现滑块视图;mouseMove为此,即使它离开第一次收到它的视图,我也需要捕获该事件。在纯js中,我会做这样的事情:

element.addEventListener 'mousemove', ..., true   // true means 'capture event'

这还有一个很好的副作用,即即使鼠标离开浏览器窗口,也会在捕获元素上触发事件,模仿 UI 控件在本机应用程序中的行为方式。

我似乎无法在 ember.js 中找到一种方法来做到这一点,但我确信我忽略了一些东西。如果不是,那么推荐这样做的方法是什么?

4

2 回答 2

3

查看旧问题的人的更新。现在组件包含mouseMove内置的事件处理程序和其他事件处理程序,以及添加自定义事件处理程序的能力。

https://guides.emberjs.com/v2.12.0/components/handling-events/

import Ember from 'ember';

export default Ember.Component.extend({
    mouseMove() {
        //do stuff
    }
});
于 2017-03-31T20:55:47.720 回答
2

不幸的是,EventDispatcher处理在根元素(通常是)上设置默认事件处理程序的 ,除了实际发生的视图之外,body没有做任何事情来限定视图。mouseMove

您可以查看onDrag,onDragStartonDragEnd( dragStart, drag,dragEnd用余烬的说法) 事件,每个规范应该在源元素上触发,因此无论它们发生在哪里,都会在您的视图上触发。

您可以手动将处理程序分配给body自己。在处理程序中添加处理程序,mouseUp并在您的(以防止重复)和处理程序中删除它们。mouseMovemouseLeavemouseEntermouseUp

最简单的方法是使用on

$('body').on('mouseMove.custom', $.proxy(this.yourHandler, this));

然后删除:

$('body').off('mouseMove.custom')
于 2013-03-22T21:19:44.777 回答