Javascript 计时器;“设置间隔”;是一个变量

Javascript 计时器;“设置间隔”;是一个变量,javascript,html,Javascript,Html,我正在制作一个弹跳球动画。我想要一个表单(num1和num2),它应该替换变量“int1”或“int2”作为“draw1”或“draw2”的计时器。加载文件并在文本框中键入数字,然后提交它们并不会改变间隔。我真的需要帮助 <!DOCTYPE HTML> <head> <title>Follow the Bouncing Ball</title> <script> var context; var x=50; var y=240;

我正在制作一个弹跳球动画。我想要一个表单(num1和num2),它应该替换变量“int1”或“int2”作为“draw1”或“draw2”的计时器。加载文件并在文本框中键入数字,然后提交它们并不会改变间隔。我真的需要帮助

<!DOCTYPE HTML>
<head>
<title>Follow the Bouncing Ball</title>
<script>
 var context;
 var x=50;
 var y=240;
 var dx=5;
 var dy=5;
 var int1=form.getElementById('num1').value;
 var int2=form.getElementById('num2').value;

 function init()
 {
  context=myCanvas.getContext('2d');
  setInterval(draw1,int1)
  setInterval(draw2,int2)
 }

 function draw1()
 {
  context.clearRect(0,0, 100,500);
  context.beginPath();
  context.fillStyle="#0000ff";
  context.arc(x,y,30,0,Math.PI*2,true); 
  context.closePath();
  context.fill();
  //Boundary Logic
if( y<35 || y>470) dy=-dy;

y+=dy

 }

 function draw2()
 {
  context.clearRect(100,0, 200,500);
  context.beginPath();
  context.fillStyle="#0000ff";
  context.arc(x+150,y,30,0,Math.PI*2,true); 
  context.closePath();
  context.fill();
  //Boundary Logic
if( y<30 || y>450) dy=-dy;

y+=dy

 }

function validate(evt) {
  var theEvent = evt || window.event;
  var key = theEvent.keyCode || theEvent.which;
  key = String.fromCharCode( key );
  var regex = /[0-9]|\./;
  if( !regex.test(key) ) {
    theEvent.returnValue = false;
    if(theEvent.preventDefault) theEvent.preventDefault();
  }
}

</script>

<body onLoad="init()">
 <canvas id="myCanvas" width="1300" height="500">
 </canvas>
 <form>
  <input type="number" id="num1" min="1" placeholder="Enter Number" autofocus required    onkeypress='validate(event)'/>
  <input type="number" id="num2" min="1" placeholder="Enter Number" required onkeypress='validate(event)'/>
  <input type="submit" value="Animate">

 </form>
</body>
</html>

跟着弹跳的球走
var语境;
var x=50;
变量y=240;
var-dx=5;
var-dy=5;
var int1=form.getElementById('num1').value;
var int2=form.getElementById('num2').value;
函数init()
{
context=myCanvas.getContext('2d');
设置间隔(绘图1,int1)
设置间隔(绘图2,int2)
}
函数draw1()
{
clearRect(0,0100500);
context.beginPath();
context.fillStyle=“#0000ff”;
弧(x,y,30,0,Math.PI*2,true);
closePath();
context.fill();
//边界逻辑
如果(y470)dy=-dy;
y+=dy
}
函数draw2()
{
clearRect(100,0200500);
context.beginPath();
context.fillStyle=“#0000ff”;
弧(x+150,y,30,0,数学π*2,真);
closePath();
context.fill();
//边界逻辑
如果(y450)dy=-dy;
y+=dy
}
功能验证(evt){
var theEvent=evt | | window.event;
var key=theEvent.keyCode | | theEvent.which;
key=String.fromCharCode(key);
var regex=/[0-9]\./;
如果(!正则表达式测试(键)){
theEvent.returnValue=false;
如果(theEvent.preventDefault)theEvent.preventDefault();
}
}

我似乎真的无法用表单中键入的数字替换“int1”或“int2”。

尝试使用
parseInt
如下:

int2=parseInt(form.getElementById('num2').value)


如果没有
parseInt
,它会认为int1和int2是字符串。

尝试使用
parseInt
,如下所示:

int2=parseInt(form.getElementById('num2').value)


如果没有
parseInt
,它会认为int1和int2是字符串。

尝试使用
parseInt
,如下所示:

int2=parseInt(form.getElementById('num2').value)


如果没有
parseInt
,它会认为int1和int2是字符串。

尝试使用
parseInt
,如下所示:

int2=parseInt(form.getElementById('num2').value)


如果没有
parseInt
,它会认为int1和int2是字符串。

这里有字符串:

form.getElementById('num1').value;

您应该将
string
解析为
int

您在这里得到字符串:

form.getElementById('num1').value;

您应该将
string
解析为
int

您在这里得到字符串:

form.getElementById('num1').value;

您应该将
string
解析为
int

您在这里得到字符串:

form.getElementById('num1').value;
您应该将
string
解析为
int

这两行:

 var int1=form.getElementById('num1').value;
 var int2=form.getElementById('num2').value;
正在加载DOM之前执行。由于这个原因,浏览器控制台中几乎肯定会出现错误。将它们移到“init”函数中

但是,一旦您这样做了,事情仍然不会起作用,因为您正在启动计时器以响应页面加载完成(“加载”事件)。如果你需要有人输入这些值,那么这显然是行不通的。最简单的方法是添加一个“开始”按钮,并将其上的“点击”事件耦合到“初始化”函数。编辑哦,好的,你已经有了一个“动画”按钮。这应该是设置“单击”处理程序的地方

最后,正如其他人所指出的,您需要将输入字段的值解释为数字。

这两行:

 var int1=form.getElementById('num1').value;
 var int2=form.getElementById('num2').value;
正在加载DOM之前执行。由于这个原因,浏览器控制台中几乎肯定会出现错误。将它们移到“init”函数中

但是,一旦您这样做了,事情仍然不会起作用,因为您正在启动计时器以响应页面加载完成(“加载”事件)。如果你需要有人输入这些值,那么这显然是行不通的。最简单的方法是添加一个“开始”按钮,并将其上的“点击”事件耦合到“初始化”函数。编辑哦,好的,你已经有了一个“动画”按钮。这应该是设置“单击”处理程序的地方

最后,正如其他人所指出的,您需要将输入字段的值解释为数字。

这两行:

 var int1=form.getElementById('num1').value;
 var int2=form.getElementById('num2').value;
正在加载DOM之前执行。由于这个原因,浏览器控制台中几乎肯定会出现错误。将它们移到“init”函数中

但是,一旦您这样做了,事情仍然不会起作用,因为您正在启动计时器以响应页面加载完成(“加载”事件)。如果你需要有人输入这些值,那么这显然是行不通的。最简单的方法是添加一个“开始”按钮,并将其上的“点击”事件耦合到“初始化”函数。编辑哦,好的,你已经有了一个“动画”按钮。这应该是设置“单击”处理程序的地方

最后,正如其他人所指出的,您需要将输入字段的值解释为数字。

这两行:

 var int1=form.getElementById('num1').value;
 var int2=form.getElementById('num2').value;
正在加载DOM之前执行。由于这个原因,浏览器控制台中几乎肯定会出现错误。将它们移到“init”函数中

但是,一旦您这样做了,事情仍然不会起作用,因为您正在启动计时器以响应页面加载完成(“加载”事件)。如果你需要有人输入这些值,那么这显然是行不通的。最简单的方法是添加一个“开始”按钮,并将其上的“点击”事件耦合到“初始化”函数。编辑哦,好的,你已经有了一个“动画”按钮。这应该是设置“单击”处理程序的地方


最后,正如其他人所指出的,您需要将输入字段的值解释为数字。

我不知道如何更改创建后的超时间隔


我只会在值更改时取消并重新创建超时。

我不知道如何更改创建后的超时间隔

我和