在 Javascript 中,如何判断用户是否同时按下两个键?

2024-01-29

在 Javascript 中,如何判断用户是否同时按下两个键?

例如,我在屏幕中间画了一个圆圈。我想在用户按住向上箭头时向上移动它,在用户按住向右箭头时向右移动它。这部分工作很容易。如果用户同时按住向上和向右箭头,我想沿对角线、向上和向右移动圆圈。

看起来这不可能通过基本的 Javascript 事件处理来实现,但肯定有人已经找到了解决方法/黑客/改进方法。


从概念上讲,这是您需要做的(我想这称为伪代码):

从这样的事情开始:

var PIXEL_DELTA  = 10; // Distance to move in pixels

var leftPressed  = 0,
    upPressed    = 0,
    downPressed  = 0,
    rightPressed = 0;

然后在每个keydown事件,测试按下的键是否为left, up等并将其变量从0 to PIXEL_DELTA.

在每一个keyup事件,运行相同的测试并将正确的变量返回0.

然后,在您的移动代码(真实代码)中:(此代码改编自 Crescent Fresh 的精彩示例):

function move() {
  var dot = document.getElementById('dot'),
      deltaX = rightPressed - leftPressed,
      deltaY = downPressed - upPressed;

  if(deltaX) {
    dot.style.left = (parseInt(dot.style.left, 10) || 0) + deltaX + 'px';
  }

  if (deltaY) {
    dot.style.top = (parseInt(dot.style.top, 10) || 0) + deltaY + 'px';
  }
}

浏览器将(应该)触发一个单独的keydown/keyup每个键的事件,即使它们被“同时”按下。

工作示例

Crescent Fresh 汇集了JSBin 上的完整示例 http://jsbin.com/iloxi。请务必参观可编辑版本 http://jsbin.com/iloxi/edit以及玩代码。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在 Javascript 中,如何判断用户是否同时按下两个键? 的相关文章

  • 在 contenteditable div 中选择范围

    我有一个contenteditablediv 和其中的一些段落 这是我的代码 div style border solid 1px black width 300px height 300px div Hello world div div
  • Eslint errorring 导入没有扩展名的 jsx

    我正在尝试在 es6 中导入 jsx 文件而不需要 jsx 扩展名 import LoginErrorDialog from LoginErrorDialogView Not import LoginErrorDialog from Log
  • 为什么 iife 在一个简单的例子中不起作用?

    我不明白为什么函数表达式调用不起作用并抛出错误 你能给我解释一下吗 var a function x alert x function a 1 谢谢大家 任务比我想象的要容易得多 这是因为 JS 将 IIFE 解析为函数的参数调用 这样做时
  • 在新的 Google 协作平台 <嵌入 HTML> 中使用 localStorage 和 IndexedDB 不起作用

    我正在尝试将新的 Google 协作平台用于我开发的网页 但是 我在存储本地数据时遇到了问题 本地文件在 Windows 和 Apple safari chrome 中运行良好 从 Google 协作平台尝试一下 没有什么乐趣 此外 在 s
  • 如何更改 Google Maps v3 API for Directions 中的开始和结束标记图像

    我使用 DirectionsRender 绘制了一条路线 但我不知道如何用我自己的标记替换通用的 Google 标记 我知道并在正常的谷歌地图情况下使用它 但发现很难用开始和结束的方向标记来做到这一点 如果这是一个愚蠢的问题 感谢您的任何建
  • 使用 dc.js 按条形值对条形图中的条形进行排序(排序)

    如何通过维度的计算值而不是维度本身的名称对 dc js 示例中的 x 轴 维度 进行排序 例如 请考虑序数条形图的 dc js 示例 https github com dc js dc js blob master web examples
  • 在打字稿中导入 json

    我是 typescript 的新手 在我的项目中 我们使用 typescript2 在我的要求之一中 我需要导入 json 文件 所以我创建了 d ts 文件如下 test d ts declare module json const va
  • Bootstrap按钮加载+Ajax

    我正在使用 Twitter Bootstrap 的按钮加载状态 http twitter github com bootstrap javascript html buttons http twitter github com bootst
  • 如何纠正流警告:解构(缺少注释)

    我正在编写一个小型 React Native 应用程序 并且正在尝试使用 Flow 但我无法在任何地方真正获得有关它的正确教程 我不断收到错误 destructuring Missing annotation 有关 station 这段代码
  • 设置 cookie 时中断 JavaScript 执行

    当设置 cookie 时 是否可以始终中断浏览器开发人员工具中的 javascript 执行 无需显式设置 JS 断点 document cookie 在 html head 块的开头添加此代码片段效果很好
  • 调整图像大小并将画布旋转 90 度

    这里有很多关于在 js 上使用画布旋转图像的主题 我阅读了其中的大部分内容 但无法找到解决我的问题的方法 我正在接收任何分辨率的图像 来自上传组件 我将其大小调整为 1024x768 如下所示 var canvas document cre
  • 尝试将数据存储在点击器网站中

    我正在尝试存储一个名为的变量score无论何时刷新 您都会一次又一次地使用它 我不明白的是它的代码是什么 我尝试了一些方法 但似乎都不起作用 这是我的答题器网站 但是当我尝试使用 JavaScript 来存储它时 它不起作用window o
  • 如何解决 Typescript 构建中的错误“找不到模块 'jquery'”

    我目前在 ts 文件的顶部有这个import require jquery 我这样做是因为我试图在我的打字稿文件中使用 jquery 但我似乎无法编译它 因为它返回标题中所述的错误 我正在使用 ASP NET CORE 脚本文件夹 tsco
  • 在 HTML5 画布中,如何用我选择的背景遮盖图像?

    我试图用画布来实现这一点 globalCompositeOperation 但没有运气 所以我在这里问 这里有类似的问题 但我没有在其中找到我的案例 我的画布区域中有图层 从下到上的绘制顺序 画布底座填充纯白色 fff 用fillRect
  • 检查 jQuery 1.7 中是否存在基于文本的选择选项

    所以我有以下 HTML 片段
  • Firebase 函数 onWrite 未被调用

    我正在尝试使用 Firebase 函数实现一个触发器 该触发器会复制数据库中的一些数据 我想观看所有添加的内容votes user vote 结构为 我尝试的代码是 const functions require firebase func
  • 在 JavaScript 循环之外声明变量可以提高速度和内存?

    C 也有类似的问题 但我们没有看到 JavaScript 的任何问题 在循环内声明变量是否可以接受 假设循环有 200 次迭代 使用样本 2 相对于样本 1 是否有性能要求 内存和速度 我们使用 jQuery 来循环 它提高了我们将 var
  • 从 FileReader 设置背景图像样式

    我正在寻找一种解决方案 允许我从文件上传输入中获取文件并通过设置 document body style backgroundImage 来预览它 以下代码用于在 Image 元素中显示预览 function setImage id tar
  • 使用 MongoDB 和 Nodejs 插入和查询日期

    我需要一些帮助在 mongodb 和 nodejs 中按日期查找记录 我将日期添加到抓取脚本中的 json 对象 如下所示 jsonObj last updated new Date 该对象被插入到 mongodb 中 我可以看到如下 la
  • 如何使用asm.js进行测试和开发?

    最近我读到asm js规范 看起来很酷 但是是否有任何环境 工具来开发和测试这个工具 这还只是处于规范阶段吗 您可以尝试使用 emscripten 和 ASM JS 1 并从侧分支在 firefox 构建中运行它 有关 asm js 的链接

随机推荐

  • Pandas 通过行替换合并两个 DF

    我遇到了将两个 DF 合并为一个并保存所有重复行的问题id来自第二个 DF 的值 例子 df1 pd DataFrame id id1 id2 id3 id4 com 134 6 223 0 123 malicious False Fals
  • 如何控制三次单击突出显示? (HTML)

    这是一个示例文本 Label Some text here 我怎样才能拥有它 以便当我三次单击该行时 它尝试仅突出显示此处的 Some text here 而不是整行 我可以发誓我以前见过用 css 完成的 我只是想不出办法 span La
  • preg_match() 和 preg_replace() 慢吗?

    我已经用 PHP 编码有一段时间了 我一直读到你应该只使用preg match and preg replace当你不得不这样做时 因为它会降低性能 为什么是这样 使用20真的很糟糕吗 preg matches在一个文件中而不是使用另一个
  • 如何使用 MatPaginator 更改分页标签中的文本? [复制]

    这个问题在这里已经有答案了 我正在使用角度材质 如何更改分页显示中标签中的文本 特别是 我想自定义页面大小选择器的标签 我尝试这样做 但似乎不起作用
  • 如何使用行分组对 PrimeNG 数据表中的数据进行排序

    我想要做的是对已经按字母顺序或自定义顺序分组的数据进行排序 我用的是sortField属性指定组头顺序 但我也需要对组内的数据进行排序 我有同样的问题 我添加了自定义排序来解决这个问题 添加自定义排序
  • java中执行多条SQL语句

    我想执行一个查询Java 我创建一个连接 然后我想执行一个INSERT语句 完成后 连接将关闭 但我想通过连接执行一些插入语句 当循环完成时 然后关闭连接 我能做些什么 我的示例代码是 public NewClass throws SQLE
  • TypeScript 按数组中的对象对对象进行排序

    有谁知道如何按任务中的 TaskTime 值对 Array 和 Person 进行排序 export class Person Id string Email string FirstName string LastName string
  • 类中的后代选择器

    由此我可以很好地理解选修课 http css maxdesign com au selectutorial selectors descendant htm基于什么元素 标签后代选择器是什么 它们如何工作 为什么工作以及目的是什么 但后来我
  • slurm:如何在另一个用户下提交作业并防止读取其他用户的文件?

    基于以下thread https stackoverflow com q 44540590 2402577 我正在尝试向另一个用户发送作业 我登录的身份是main user 并且 slurm 作业通过以下方式提交main user那可以做r
  • 启用 AR 相机时 iPhone X 手电筒会关闭

    我正在构建一个 AR 应用程序 需要将手电筒打开为手电筒模式 在我的 iPhone 8 上打开手电筒模式然后启用 AR 场景效果很好 但在 iPhone X 上 手电筒会打开然后再次关闭 有什么办法可以解决这个问题 或者我必须做一些特定的事
  • Symfony 错误 500 与 app.php,在 app_dev.php 上工作正常

    我目前正在尝试通过访问 app php 来使用我们的 基本 Symfony 2 应用程序 但是 每当我尝试访问 app php 时 都会收到错误 500 我检查了日志 生产日志为空 我已经尝试过配置文件中的 assetic 条目 但无济于事
  • 如何更改 pyplot.specgram x 和 y 轴缩放?

    我以前从未使用过音频信号 对信号处理知之甚少 尽管如此 我需要使用来表示音频信号pyplot specgram函数来自绘图库图书馆 我是这样做的 import matplotlib pyplot as plt import scipy io
  • ExifLib 可在 WPF / XAML 应用程序中使用吗?

    我想从 jpg 图像中提取 exif 数据 ExifLib http www nuget org packages ExifLib似乎是简化这项繁琐工作的不错选择 因此我通过 NuGet 安装了它 然后我尝试开始使用示例代码here htt
  • TYPO3:将插件从 USER 更改为 USER_INT 类型

    我有一个可用的 TYPO3 扩展 附有这个维基页面 http wiki orbeon com forms doc developer guide form runner typo3 extension 如何更改此扩展的代码 使其成为 USE
  • UISearchController searchBar在推送视图控制器时不会消失

    我在 ma 中使用 UISearchControllerUIViewcontroller其中包含一个UITableView 我这样做是在viewDidLoad self searchController UISearchController
  • 由于位图大小过大而导致内存不足异常

    由于虚拟内存堆大小有限 我遇到内存不足的问题 这是我从服务器获取位图的代码 SuppressWarnings unchecked public class DrawableManager SuppressWarnings rawtypes
  • Android 通知未在 API 26 上显示

    我最近将我的应用程序更新到 API 26 并且通知不再起作用 甚至没有更改代码 val notification NotificationCompat Builder this setSmallIcon R drawable ic noti
  • Amazon S3 重定向和 Cloudfront

    我正在尝试使用此处引用的对象在 S3 上设置 301 重定向http docs aws amazon com AmazonS3 latest dev how to page redirect html http docs aws amazo
  • Git:更新后挂钩,运行需要访问存储库中所有文件的脚本

    我现在遇到了一些困境 因为我需要一个脚本来运行 每当远程存储库更新时 即 每当有人运行 git Push 从存储库中的文件构建包 然后 这些包被放置到 git 服务器上的一个目录中 该目录通过 HTTP 公开给客户端以供将来使用 问题是 我
  • 在 Javascript 中,如何判断用户是否同时按下两个键?

    在 Javascript 中 如何判断用户是否同时按下两个键 例如 我在屏幕中间画了一个圆圈 我想在用户按住向上箭头时向上移动它 在用户按住向右箭头时向右移动它 这部分工作很容易 如果用户同时按住向上和向右箭头 我想沿对角线 向上和向右移动