0

jQueryで関数を停止する必要があります。試してみpreventStop()ましたが、構文が間違っていると思います。これはコードです:

function changeColor(curNumber){
        curNumber++;

        if(curNumber > 3){
            curNumber = 1;
        }

        $('body').removeClass().addClass('bgColor' + curNumber);
        setTimeout(function(){changeColor(curNumber)}, 600);
}
    changeColor(0);

ご覧のとおり、クラスを変更しています。ユーザーがドキュメントをクリックした場合に、そのアクションを停止したいと考えています。

$('body').click(function(event){
        event.stopPropagation();
    })

そのようなものは私にはうまくいきませんでした。

4

6 に答える 6

3

setTimeoutタイマー ID を返します。

var timer = null;

function changeColor(curNumber) {
    ...

    timer = setTimeout(function() {
        changeColor(curNumber)
    }, 600);
}

あなたはそれをクリアすることができますclearTimeout

$('body').click(function(event){
    if (timer !== null) {
        clearTimeout(timer);
    }
})
于 2013-03-15T04:42:50.700 に答える
3

色の変化を止めようとしている場合は、現在のタイマーを変数に記憶してから停止することで、次のようにすることができます。

var timer;
function changeColor(curNumber){
    curNumber++;

    if(curNumber > 3){
        curNumber = 1;
    }

    $('body').removeClass().addClass('bgColor' + curNumber);
    timer = setTimeout(function(){changeColor(curNumber)}, 600);
}
changeColor(0);

$('body').click(function(event){
    clearTimeout(timer);
})

その後、再度呼び出すことで再開できchangeColor()ます。

于 2013-03-15T04:43:37.970 に答える
1

return false;それを達成するために使用できます。

return false を使用するたびに、コントロールは戻ります。他のステートメントは実行されません。つまり、イベントはファイルされません。

于 2013-03-15T04:41:28.473 に答える
1

2つのこと:

  1. 定期的なイベントsetIntervalの代わりに使用する必要があります。setTimeout

  2. clearTimeoutこれらの関数は両方とも、またはclearIntervalそれぞれに渡すことができる値を返します。

外側のスコープで呼び出しsetInterval、その戻り値をアクセス可能な場所に保存する場合、クリック イベントをバインドclearIntervalしてその値で呼び出し、繰り返しのコールバックを停止できます。

于 2013-03-15T04:45:31.593 に答える
0

のようにしてみてください

$('body').click(function(event){
    event.preventDefault();
})

またはあなたが試すことができます

$('body').click(function(event){
    return false;
})
于 2013-03-15T04:40:58.597 に答える