Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/368.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/html/85.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
setTimeout()在JavaScript中如何工作?_Javascript_Html_Css_Settimeout - Fatal编程技术网

setTimeout()在JavaScript中如何工作?

setTimeout()在JavaScript中如何工作?,javascript,html,css,settimeout,Javascript,Html,Css,Settimeout,在我的代码中,我想画一条线。为此,我根据直线方程来放置点。我还希望在打印下一个点之前延迟100毫秒。因此,我使用了setTimeout()。但当我运行这段代码时,首先它会等待一段时间,然后一次打印所有的点,没有100毫秒的延迟。 这是我画线的代码: function drawLine(x1, y1,x2,y2){ var x, y, m; m=(y2-y1)/(x2-x1); for(x=x1;x<=x2;x++){ y=(m*(x-x1)+y1

在我的代码中,我想画一条线。为此,我根据直线方程来放置点。我还希望在打印下一个点之前延迟100毫秒。因此,我使用了setTimeout()。但当我运行这段代码时,首先它会等待一段时间,然后一次打印所有的点,没有100毫秒的延迟。 这是我画线的代码:

function drawLine(x1, y1,x2,y2){

    var x, y, m;
    m=(y2-y1)/(x2-x1);

    for(x=x1;x<=x2;x++){
        y=(m*(x-x1)+y1)/6;
        setTimeout(drawPoint,100,x,y);
    }

}

function drawPoint(a,b){

    main=document.getElementById("main");     //parent div tag in which children div tags are to be appended
    var children=main.childNodes;
    var child=document.createElement("div");

    child.className="anime";
    child.style.left=a+"px";
    child.style.top=300-b+"px";             //300 is some offset

    main.appendChild(child);     
}  
功能绘制线(x1、y1、x2、y2){
变量x,y,m;
m=(y2-y1)/(x2-x1);
对于(x=x1;x

for loop
非阻塞的
,循环中的所有
setTimeout
实例将在指定的持续时间完成后执行

维护一个
计数器
,并将其用作
setTimeout()
中的
毫秒
参数,以便循环中的每个处理程序都将以
100的倍数调用(100200300,…)

功能绘制线(x1、y1、x2、y2){
变量x,y,m;
m=(y2-y1)/(x2-x1);
var计数器=1;
对于(x=x1;x

for loop
非阻塞的
,循环中的所有
setTimeout
实例将在指定的持续时间完成后执行

维护一个
计数器
,并将其用作
setTimeout()
中的
毫秒
参数,以便循环中的每个处理程序都将以
100的倍数调用(100200300,…)

功能绘制线(x1、y1、x2、y2){
变量x,y,m;
m=(y2-y1)/(x2-x1);
var计数器=1;

对于(x=x1;xUse而不是setTimeout

Use而不是setTimeout

for loop
非阻塞的
setTimeout不会暂停循环,因此它们实际上都是在同一时刻以相同的延迟设置的。此外,并非所有浏览器都支持2以外的附加参数。谢谢@RayonDabre,我该怎么办?检查循环
是否为
非阻塞
setTimeout不会暂停循环,因此它们实际上都是在同一时刻以相同的延迟设置的。此外,并非所有浏览器都支持2以外的附加参数。谢谢@RayonDabre,我该怎么办?检查这不是一个有用的答案。这不是一个有用的答案我回答。