javascript - 如何切换浏览器事件目标

标签 javascript html angularjs events three.js

我有一个基于 three.js 的 3d 场景,它占据了整个窗口。

我有一个 html 叠加层的 Angular 加载,它占据了右侧 enarly 20% 宽度的列。

我正在使用与此类似的方法来了解事件发生的位置 - Javascript event handler on body but not on input

现在的问题是在我单击 html 叠加层上的复选框之后。任何 future 的键盘事件(例如用于在我的 3d 场景中移动相机的 w、a、s、d)都有 target = input。

即使我点击 3d 场景并启动键盘事件,目标也会被输入。

我必须删除 html 覆盖,然后所有 future 的键盘事件都有目标主体。

如何允许用户在不移除 html 覆盖的情况下切换事件目标?

最佳答案

目标将设置为当前获得焦点的元素。您所要做的就是确保在单击后模糊复选框。您可以编写一个非常简单的指令来执行此操作。例如:

app.directive("noFocus", function() {
  return function(scope, element) {
    element.find("input").on("focus", function(ev) {
      ev.target.blur();
    });
  };
});

然后您可以在您的 html 叠加层上使用它:

 <div no-focus>
          Things inside here should lose focus immediately.

          Click Here: <input type="checkbox" />
          <p>
          After clicking on the checkbox it should still log the body as the target on keypresses.  
          </p>


    </div>

这是一个 plunkr,因此您可以看到它的实际效果,尝试单击复选框然后键入键:

http://plnkr.co/edit/mzxjdBKfz59Ec0R9oq1K?p=preview

如果您删除“无焦点”指令,它将在您按下按键时将输入记录到控制台。如果您有“无焦点”,它将记录 <body>即使您已单击复选框。

关于javascript - 如何切换浏览器事件目标,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20496060/

相关文章:

javascript - Node.js测试如何使用独享的Redis数据?

javascript 在逗号后 chop 字符串

c# - 在javascript中访问cs变量

javascript - 根据复选框状态检索标签的值

html - 如何使用 flex 模型向右移动按钮?

javascript - 使用 jQuery 从分隔列表中删除元素

angularjs - 具有多条水平线(边距)的 Angular 图/折线图

javascript - 使用 Gulp 时 AngularJS 组件配置错误

javascript - 原型(prototype)如何在 typescript 上扩展?

javascript - textarea 上的 Angular $sce.trustAsHtml 与 ng-model 相同