gpt4 book ai didi

javascript - 为什么我的间隔只清除了一半?

转载 作者:塔克拉玛干 更新时间:2023-11-02 20:58:07 24 4
gpt4 key购买 nike

我一直在从事我的第一个主要编程项目,到目前为止进展顺利。我的目标是让动画运行直到事件被触发或 15 秒过去。动画超时后我想重复动画。我目前对该计划的解决方案如下所示。

    var animationSpeed = 40;
var animationTimout = 375;
var testTime = 1;
//some more set up variables

function onClick() {
startDrive();
setTimeout(startDrive, 15000); //****
}

function startDrive() {
var Driving = setInterval(carDriving, aniSpeed);
}

function carDriving() {
testLocation();
drawCar();
angleCalc();
newLocation();
getInfo();
}

function testLocation() {
//this code gets information on whether or not the animation should be stopped
testTime = testTime + 1

if(a === 1 || testTime > animationTimeout) {
//a test to cancel the animation, the other variables test to
clearInterval(Driving);
}
}

function drawCar() {
//draws the car
}

function angleCalc() {
//gets some info on how to move the car
}

function newLocation() {
//decides on new coords for the car based on angleCalc();
}

function getInfo() {
//gets some info I plan to use later in the project
}

当我运行没有加星号的代码时,一切正常。如果满足停止条件,汽车会按照我的意愿进行动画处理并停止。汽车停在 Canvas 上的原处,间隔似乎被清除了。当我添加带星号的代码行时,动画似乎可以运行,但运行速度是以前的两倍。我完全迷路了,我尝试的任何东西都不起作用。请帮忙。

最佳答案

问题可能是由于此处定义的局部变量引起的:

function startDrive() {
var Driving = setInterval(carDriving, aniSpeed);
}

变量 Driving 只在函数 startDrive 中定义,它是一个局部变量,因为您在函数内部使用 var 定义它.因此,当您尝试在 testLocation() 中访问它时,您访问的不是同一个变量。事实上,当您执行 clearInterval(Driving) 时,变量 Driving 并未定义。一个简单的解决方案是通过删除 var 使 Driving 全局化:

function startDrive() {
Driving = setInterval(carDriving, aniSpeed);
}

或者您可以将计时器作为参数传递到 testLocation 函数中。这样您就可以正确地清除间隔。

关于javascript - 为什么我的间隔只清除了一半?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34702967/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com