Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/459.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/7/neo4j/3.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 如何为我们使用clearInterval()函数?_Javascript - Fatal编程技术网

Javascript 如何为我们使用clearInterval()函数?

Javascript 如何为我们使用clearInterval()函数?,javascript,Javascript,无法终止我在启动中创建的setInterval。它一直工作到时间结束。我想在next()函数和prev()函数中使用clearInterval(interval)操作。我该怎么做?当我单击“前进”时,我希望clearInterval(interval)运行此操作,但我不能 函数启动(){ thisTimeline=document.getElementsByClassName('story-active-'+start)[0]; var maxtime=5000; var增量=100; var

无法终止我在启动中创建的
setInterval
。它一直工作到时间结束。我想在
next()
函数和
prev()
函数中使用
clearInterval(interval)
操作。我该怎么做?当我单击“前进”时,我希望
clearInterval(interval)
运行此操作,但我不能

函数启动(){
thisTimeline=document.getElementsByClassName('story-active-'+start)[0];
var maxtime=5000;
var增量=100;
var实际时间=0;
var interval=setInterval(函数(){
实际时间+=增量;
var百分比=数学ceil((100/最大时间)*实际时间);
thisTimeline.style.width=百分比+'%';
如果(百分比==100){
间隔时间;
thisTimeline.style.width=“0%”;
}
},增量);
}
函数next(){
//将上一个视频时间线设置为100%完成
thisTimeline.style.width='100%';
//将播放计数提前到下一个视频
启动++;
//如果下一个视频不存在(即上一个视频是最后一个视频),则关闭社交故事弹出窗口
如果(开始>=默认值.playlist.length){
setTimeout(函数(){
close();
返回false;
}, 400);
}否则{
//否则,运行下一个视频
发射(启动);
}
}
函数prev(){
如果(开始!=0){
thisTimeline.style.width='0%';
}
//将播放计数减去上一个视频
开始--;
//如果下一个视频不存在(即上一个视频是最后一个视频),则关闭社交故事弹出窗口
如果(开始<0){
开始=0;
返回false;
}否则{
//否则,请运行上一个视频
发射(启动);
}

}
这是@lagoCalazans注释的扩展

他说的是,在你的变量中,“间隔”是在你的启动函数中创建的。您需要将“interval”设置为全局,以清除设置的interval

例:


正如您在启动函数中看到的,“tempInterval”仅限于启动范围,因此无法在其他任何地方访问,但现在由于“interval”是全局的,因此可以在任何函数中访问它。

您的代码似乎有点不完整,因此,仅出于说明目的,我假设您将这些函数封装在一个高阶函数中(如a),并且将避免编写该函数(例如,某种全局状态或变量也可以)

首先,
setInterval
将返回一个您稍后将使用的id,因此如果您想在
next
prev
中使用它,您需要该值对他们可用

因此,在您的示例中,您应该
启动
外部声明
间隔
,并在内部为其分配一个值:

let间隔
函数启动(){
// ...
interval=setInterval(函数(){…})
}

然后在任何需要的地方使用
interval

launch
next
prev
是三个独立的功能。它们不引用相同的
间隔
,因为它们不共享。提高
间隔
变量的范围

let interval='';//在这里声明,所有函数都可以访问interval
函数启动(){
// ...
//在间隔之前删除var
间隔=设置间隔(…)
}
函数next(){
// ...
//在间隔之前删除var
间隔=设置间隔(…)
}
函数prev(){
// ...
//在间隔之前删除var
间隔=设置间隔(…)
}

你的上一个()和下一个()都有自己的作用域。@IagoCalazans我不明白..惊人的解释!
let interval = null; //global

function launch() {
    let tempInterval = setInterval(function() {
        //whatever code
    },100); 

    interval = setInterval(function(){
        console.log("Hello");
    }, 100);
}

function clear() {
    //Since interval is global I can clear it when I call clear();
    clearInterval(interval);
}