【问题标题】:Detecting keydown/up events during HTML5 native drag在 HTML5 原生拖动期间检测 keydown/up 事件
【发布时间】:2011-09-05 16:00:15
【问题描述】:

我有一个可以使用原生 HTML5 拖动的元素。它具有分配给它的 dragstart、drag 和 dragend 事件侦听器。此外,我还为 document.body 元素分配了 keydown 和 keyup 事件侦听器。

拖动可拖动元素时,ondrag 事件将按预期触发。当我在不拖动任何东西的情况下按下并释放任何键时,document.body keydown/up 事件将触发。

但是,如果我在执行 ondrag 时 keydown/up,则不会触发 document.body keydown/up 事件。有什么解决方法/破解方法吗?

【问题讨论】:

  • 你能提供一个例子/小提琴吗?
  • 我努力了,但是在 webkit 浏览器中,我无法在正常的拖动事件期间使用按键事件。即使没有绑定这些事件,关键事件也不会被注册。
  • 这可能是浏览器的错误/功能。
  • 我没有看到规范说键盘按下应该被阻止。我确实看到这是行为。真是一个蹩脚的惊喜:) 为什么多年来一直这样?太可怕了!

标签: javascript html drag keyevent


【解决方案1】:

回答我自己的问题...来自Drag Operations - MDN

使用 dragenter 和 dragover 事件,dropEffect 属性是 初始化为用户正在请求的效果。用户可以 按修饰键修改所需的效果。虽然 使用的确切键因平台而异,通常是 Shift 和 Control 键 将用于在复制、移动和链接之间切换。

在 HTML5 原生拖动中,唯一可以触发任何操作的按键是修饰键。在 Mac 上,它是选项键和控制键。动作是通过 event.dataTransfer.effectAllowed 而不是 keypress 或 keydown 事件捕获的。

【讨论】:

    最近更新 更多