Ember:如何在不是目标的视图中获取鼠标事件

时间:2015-03-12 14:01:10

标签: javascript ember.js

我有一个Ember.js应用程序,其中我使用鼠标事件(向下,向上和向上)以允许用户通过在按住时单击并拖动来调整元素大小。 像魅力一样工作 - 直到鼠标指针离开视图的边界。然后,我没有任何迹象表明用鼠标进行了什么。

要了解我想要实现的内容,请考虑Paint中的编辑视图 - 单击并拖动以创建矩形。如果您通过视图的顶部,矩形的高度会停止变化,但宽度会根据鼠标当前位置而变化。

即使目标现在是另一个视图,我也想继续获取鼠标移动的更新。如何以干净的方式实现它 - 不修改其余视图?

理想情况下,我想要做的是在mouseLeave中运行一个代码来修改Ember的全局事件监听器委派事件的方式 - 这样它们就会被传递到我的视图中,即使它和&# #39;不是目标。当然 - 当释放鼠标按钮时我需要清除它。

1 个答案:

答案 0 :(得分:2)

然后,您通常必须在document上注册事件处理程序,并过滤掉target以匹配您的观点。

使用jQuery的示例:

var mouseDown = false;
$(document).on("mousedown", function(e){
    // If we target the view element, we can start capture events
    var $target = $(e.target);
    if ($target.closest("#yourViewElement").length !== 0 || $target.is("#yourViewElement")) {
        mouseDown = true;
    }
});
$(document).on("mouseup", function(e){
    mouseDown = false;
});
$(document).on("mousemove", function(e){
    // We initially clicked on the view, so we listen for the changes now
    if (mouseDown) {
        // Parse events here, e.pageX / e.pageY etc.
    }
});