所以这是我的代码:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8" />
<title></title>
<style>
html {
overflow: hidden;
}
#demo{
position: relative;
}
</style>
</head>
<body>
<input type="text" onkeypress="Snake(event)">
<p id="demo" style="left: 10px;">--></p>
<script>
function Snake(event) {
var x = event.which;
switch (x) {
case 119: /*forward(w)*/
break;
case 115: /*back(s)*/
break;
case 97: document.getElementById("demo").style.left = "10px";
clearInterval(int);
break;
case 100: var y = document.getElementById("demo").style.left; y = y.replace("px", ""); y = parseInt(y);
var int = setInterval(function () {
y += 10;
var z = y.toString();
document.getElementById("demo").style.left = z + "px";
}, 1000);
break;
}
}
</script>
</body>
</html>
当我点击d(unicode = 100)时它工作得很好但是每当我按下(unicode = 97)它会回到10px,然后从它离开的地方继续。 (与d)。可能是clearInterval()存在问题。
答案 0 :(得分:1)
您的int
变量的范围是该函数。这意味着在下次调用函数时,您不会处理相同的int
变量;你正在处理一个新的。
要使用单个int
变量,请在声明Snake
的范围内声明它。 但,这意味着现在有两个(Snake
和Snake
),而不是一个全局(int
)。 Globals是Bad Thing™。
相反,让我们使用 no 全局变量并使用现代事件处理来连接你的处理程序:
<input id="the-inpue" type="text"">
<p id="demo" style="left: 10px;">--></p>
<script>
(function() { // A scoping function so we don't create globals
var int = 0; // The variable
function Snake(event) {
var x = event.which;
switch (x) {
case 119: /*forward(w)*/
break;
case 115: /*back(s)*/
break;
case 97: document.getElementById("demo").style.left = "10px";
clearInterval(int);
break;
case 100: var y = document.getElementById("demo").style.left; y = y.replace("px", ""); y = parseInt(y);
var int = setInterval(function () {
y += 10;
var z = y.toString();
document.getElementById("demo").style.left = z + "px";
}, 1000);
break;
}
}
// Hook up the handler
document.getElementById("the-input").addEventListener("keypress", Snake, false);
</script>
注意:代码中可能存在其他错误。但这是int
的错误,而不是清除计时器。
答案 1 :(得分:0)
您的int
变量必须在Snake
函数之外声明,以便setInterval()
和clearInterval()
能够在每个keypress
事件中访问它。
<html lang="en">
<head>
<meta charset="utf-8" />
<title></title>
<style>
html {
overflow: hidden;
}
#demo{
position: relative;
}
</style>
</head>
<body>
<input type="text" onkeypress="Snake(event)">
<p id="demo" style="left: 10px;">--></p>
<script>
var int; // 1st change
function Snake(event) {
var x = event.which;
switch (x) {
case 119: /*forward(w)*/
break;
case 115: /*back(s)*/
break;
case 97: document.getElementById("demo").style.left = "10px";
clearInterval(int); // 2nd change
break;
case 100: var y = document.getElementById("demo").style.left; y = y.replace("px", ""); y = parseInt(y);
int = setInterval(function () { // 3rd change
y += 10;
var z = y.toString();
document.getElementById("demo").style.left = z + "px";
}, 1000);
break;
}
}
</script>
</body>
</html>
答案 2 :(得分:0)
您可以创建一个对象并将函数和区间变量指定为属性
Error:(44, 71) type mismatch;
found : com.dexcom.rt.model.DaoDataPostHeader
required: Option[String]
val copied = WithRecordIdentification.withId(sampleGlucoseRecord, header)
Error:(44, 71) type mismatch;
found : com.dexcom.rt.model.DaoDataPostHeader
required: Option[java.util.UUID]
val copied = WithRecordIdentification.withId(sampleGlucoseRecord, header)
Error:(44, 71) type mismatch;
found : com.dexcom.rt.model.DaoDataPostHeader
required: Option[Long]
val copied = WithRecordIdentification.withId(sampleGlucoseRecord, header)
您可以调用sampleTimer.Snake(具有100个unicode的键); sampleTimer.Snake(具有97个unicode的键);
变量是函数作用域的(这意味着变量可以在函数内部访问)。一旦调用该函数,变量寿命就会结束。
否则你可以按照@ T.J的建议去做。克劳德