如何使用keydown让函数单次运行?及!符号含义解析
问题解答
一、代码中!的含义
!是JavaScript里的逻辑非运算符,作用是对布尔值取反:
- 要是变量值为
true,!变量就会变成false - 要是变量值为
false,!变量就会变成true
你代码里的!started,意思就是“当started为false(游戏还没启动)时”,只有满足这个条件,才会执行后面的代码。
二、让keydown事件触发的函数仅运行一次的方法
结合你的需求(按下按键修改标题,启动后不再重复触发),可以参考keypress事件的逻辑,给keydown加上状态锁:
修改后的keydown代码
$(document).keydown(function () { if (!started) { $("#level-title").text("Level " + level); nextSequence(); started = true; } });
核心思路
- 先定义一个全局状态变量
started,初始值设为false(表示游戏未启动) - 触发
keydown事件时,先判断!started(也就是游戏还没启动),满足条件才执行启动逻辑:修改h1标题为Level 0(对应初始level值)、调用nextSequence()、把started设为true - 之后再按键盘,
started已经是true,!started就变成false,不会再执行里面的代码,自然就实现了函数只运行一次的效果
原代码的问题
你原来的keydown事件只判断了!started就调用nextSequence(),但没把started改成true,所以只要started还是false,每次按键都会重复触发,加上started = true就能锁定状态,避免重复执行。
内容的提问来源于stack exchange,提问作者AbdulRehman Rizwan
相关产品推荐
相关产品推荐

