我有一个Ember.js应用程序,其中我使用鼠标事件(向下,向上和向上)以允许用户通过在按住时单击并拖动来调整元素大小。 像魅力一样工作 - 直到鼠标指针离开视图的边界。然后,我没有任何迹象表明用鼠标进行了什么。
要了解我想要实现的内容,请考虑Paint中的编辑视图 - 单击并拖动以创建矩形。如果您通过视图的顶部,矩形的高度会停止变化,但宽度会根据鼠标当前位置而变化。
即使目标现在是另一个视图,我也想继续获取鼠标移动的更新。如何以干净的方式实现它 - 不修改其余视图?
理想情况下,我想要做的是在mouseLeave中运行一个代码来修改Ember的全局事件监听器委派事件的方式 - 这样它们就会被传递到我的视图中,即使它和&# #39;不是目标。当然 - 当释放鼠标按钮时我需要清除它。
答案 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.
}
});