Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/364.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
Javascript setInterval和clearInterval不工作_Javascript - Fatal编程技术网

Javascript setInterval和clearInterval不工作

Javascript setInterval和clearInterval不工作,javascript,Javascript,我试图做一个动态进度条,从1%宽度开始,到100%宽度; 下面是函数 const dynamicBar = (id)=>{ let bar = document.getElementById(id); let width = 1; let id= setInterval(frame,10); function frame(){ if(width>=100)

我试图做一个动态进度条,从1%宽度开始,到100%宽度; 下面是函数

const dynamicBar = (id)=>{
            let bar = document.getElementById(id);
            let width = 1;

            let id= setInterval(frame,10);
            function frame(){
                if(width>=100){
                    clearInterval(id);
                }
                else{
                    bar.style.width = width + "%";
                    width++;
                }
            }

        };
以及html部分:

<div class="w3-light-grey">
    <div class="w3-red" style="width:20%;height:20px;" id="bar1">       
    </div>  
</div>

<button onClick="dynamicBar('bar1')" class="w3-button">Click Me</button>
但该功能不起作用。如果我使用var而不是let,它是有效的,但是我想知道如何使用let关键字来实现这一点

let不允许您两次定义某个内容,因此需要使用不同的名称。您的参数和第5行都有id,这是let所不允许的

比如说,

let var1 = true;
let var1 = false;
将抛出一个错误,因为它定义了两次var1。但是,您可以更改该值

let var1 = true;
var1 = false;
上面的代码块可以正常工作。let的使用是为了避免在大型程序中意外重写变量

常量dynamicBar=idName=>{ 让bar=document.getElementByIDName; 设宽度=1; 设id=setIntervalframe,10; 功能框架{ 如果宽度>=100{ 清晰有效; }否则{ bar.style.width=宽度+%; 宽度++; } } }; 单击“我”let不允许您两次定义某个内容,因此您需要使用不同的名称。您的参数和第5行都有id,这是let所不允许的

比如说,

let var1 = true;
let var1 = false;
将抛出一个错误,因为它定义了两次var1。但是,您可以更改该值

let var1 = true;
var1 = false;
上面的代码块可以正常工作。let的使用是为了避免在大型程序中意外重写变量

常量dynamicBar=idName=>{ 让bar=document.getElementByIDName; 设宽度=1; 设id=setIntervalframe,10; 功能框架{ 如果宽度>=100{ 清晰有效; }否则{ bar.style.width=宽度+%; 宽度++; } } };
当您使用var时,单击Me,您的第一个Id将被第二个Id赋值覆盖,因此它不会抛出错误。但是当您使用let时,它倾向于保持代码的完整性,并说不

例如

var foo = "something" 
var foo = "another thing"

console.log(foo) //another thing
但是

还有一件事,就是对常量值使用const

而不是这个

设id=setIntervalframe,10

使用

确保你清除了名声中的间隔

clearInterval(interval)

当您使用var时,您的代码将开始工作

,您的第一个Id被第二个Id赋值覆盖,因此它不会抛出错误。但是当您使用let时,它倾向于保持代码的完整性,并说不

例如

var foo = "something" 
var foo = "another thing"

console.log(foo) //another thing
但是

还有一件事,就是对常量值使用const

而不是这个

设id=setIntervalframe,10

使用

确保你清除了名声中的间隔

clearInterval(interval)

您的代码将开始工作

多次使用id作为变量名-您将其传递到函数中,但声明一个本地变量-可能是什么原因导致它无法工作,调用第二个变量intervalId或其他不同的名称-这就是问题所在。感谢多次使用id作为变量名—您将其传递到函数中,但声明了一个本地变量—可能是什么原因导致它无法工作,请调用第二个变量intervalId或其他不同的名称—这就是问题所在。谢谢