0

所以在我的代码中,如果一个元素没有做某事 [ playing] 那么我会开始播放它。如果它正在播放,请停止它。我设法让它开始播放,但它永远不会停止。

var playing = false;
var current = 30;
$('#countDownContainer').click(function() {
        if (!playing) {
            playing = false;
            setInterval(function() {
                $('#workSpace label').get(0).innerHTML = current;
                current -= 1;
            },1000);
        } else {
            playing = true;
        }
    });

理论上,当用户单击时#countDownContainerplaying将设置为 false 并运行setInterval代码,如果它已经在播放,playing则将设置为 true,并且当通过循环时它不会运行。但事实上,它一直在不断变化30。当我29再次30单击按钮时,它从未停止过。请帮助-谢谢

4

3 回答 3

1

这称为逻辑错误

因为注意以下几点:

var playing = false;         // playing is initialised to false

if (!playing) {              // if not playing
        playing = false;     // set playing to false

因此playing永远无法成为true

您可以通过执行以下操作来解决:

var playing = false;
var current = 30;
$('#countDownContainer').click(function() {
    if (playing) {
        playing = false;
    } else {
        playing = true;
         setInterval(function() {
            $('#workSpace label').get(0).innerHTML = current;
            current -= 1;
        },1000);
    }
});

或者说:

如果没有playing,我们让它播放:playing = true;

如果playing,我们让它不播放,因此:playing = false

附录

对于停止问题,请参阅@Riturajratan 他的问题。

于 2013-08-23T12:19:02.370 回答
1
var clear= setInterval(function() {
                    $('#workSpace label').get(0).innerHTML = current;
                    current -= 1;
                },1000);

    clearinterval(clear);// to stop interval where you want
    //clearInterval(id_of_setinterval)

参考清除间隔

于 2013-08-23T12:18:10.683 回答
1

首先,我认为您混淆了您的 varplaying分配。您还应该分配从中返回的 ID,setInterval以便以后可以使用以下命令中止该间隔循环clearInterval

//initialize var at the start of the script
var intervalID;

// in the onclick event
if (!playing) {
    playing = true; // should be true here
    intervalID = setInterval(function() {
        $('#workSpace label').get(0).innerHTML = current;
        current -= 1;
    },1000);
} else {
    playing = false; // should be false here
    clearInterval(intervalID);
}

请参阅有关 clearInterval 的文档

于 2013-08-23T12:18:29.190 回答