在 clearInterval 之后返回

Return after clearInterval

提问人:József Kiss 提问时间:2/7/2022 最后编辑:József Kiss 更新时间:2/8/2022 访问量:448

问:

我有一个在函数中运行 setInterval 的代码。我试图实现的是在 clearInterval 发生后退出该函数。我设置了一个条件来检查间隔是否被清除。我正在努力寻找一种根据代码的当前状态从主 Start() 函数返回的方法。

法典:

function Start() {

    var elementX = document.getElementById('moveMeX')
    var elementY = document.getElementById('moveMeY')
    elementY.style.top = "0px"

    var posX = 0
    startPosX = 0
    var posY = 0
    startPosY = 0
    var speed = 1
    var xIsMoving = true
    var yIsMoving = true

    var myIntervalX = setInterval(function() {
        if(startPosX == 0) {
            posX+=speed
            elementX.style.left = posX + 'px'
            if(posX==100) {
                startPosX = 100
            }
        }
        else if (startPosX==100) {
            posX-=speed
            elementX.style.left = posX + 'px'
            if(posX==0) {
                startPosX = 0
            }
        }
    }, 10);
    
    function stopX() {
        clearInterval(myIntervalX);
        xIsMoving = false
    }
    
    elementX.addEventListener("mousedown", stopX);
    elementX.addEventListener("mousedown", startY);
    
    function startY() {
        var myIntervalY = setInterval(function() {
            if(startPosY == 0) {
                posY+=speed 
                elementY.style.top = posY + 'px'
                if(posY==100) {
                    startPosY = 100
                }
            }
            else if (startPosY==100) {
                posY-=speed
                elementY.style.top = posY + 'px'
                if(posY==0) {
                    startPosY = 0
                }
            }
        }, 10);
    
        function stopY() {
            elementY.style.zIndex = "-1";
            clearInterval(myIntervalY);
            yIsMoving = false
        }
        
        elementY.addEventListener("mousedown", stopY);
    }

    if (xIsMoving === false && yIsMoving === false) {
        console.log('stopped')
        stopped = true
    }
}

Start()

Codepen 链接:https://codepen.io/silentstorm902/pen/podNxVy

JavaScript 函数 返回 setinterval clearinterval

评论

0赞 pm100 2/7/2022
你不需要递归,只需要一个 for 循环调用 Start
0赞 József Kiss 2/7/2022
好的,但是我如何从启动函数返回?
0赞 elunomas 2/7/2022
我下面的回答并没有解决你的递归问题,但希望它有助于你如何知道一个“运行”何时完成。如果您还需要递归方面的帮助(在我看来,您当前的递归代码不起作用),请告诉我。

答:

0赞 elunomas 2/7/2022 #1

您声明有问题的部分,

if (xIsMoving === false && yIsMoving === false) {
    console.log('stopped')
    stopped = true
}

目前只运行一次:首次调用 Start() 时。此时,这两个条件都是 false,因为变量的初始声明值为 true

你可以每隔一段时间创建一个新的语句来运行这个语句,但这似乎没有必要,因为你当前的 stopY 函数实际上是你知道 xIsMoving 和 yIsMoving 都是 false 的地方——因为 stopY 只在 stopX 运行后运行。因此,只需将 of 的语句移到 stopY 函数的末尾即可:setIntervalifstopped=true

function stopY() {
    elementY.style.zIndex = "-1";
    clearInterval(myIntervalY);
    yIsMoving = false;
    console.log("stopped");
    stopped = true;
}

评论

0赞 József Kiss 2/7/2022
但是,我如何使用该信息从函数返回呢?