2016-04-03 19 views
0

私は、ボタンをクリックしたときにフェードアウトするjavascipt(jQuery)を持っていて、タイムアウト機能を使って5秒後に再びフェードアウトします。それは正常に動作しますが、ユーザがタイムアウト内のfadeOut関数が実行される前にボタンを再度クリックすると、タイムアウトが必要になり、本来はやり直す必要があります。タイムアウト機能のキャンセル/停止

私はこの作業を行うことはできませんが、最初にタイムアウトをクリアする関数を実行することになると思います。

$('button').on('click', function() { 

    //need function here to stop the timeout if running 

    $("#myDiv").fadeIn(slow); 

    setTimeout(function(){ 
    $("#myDiv").fadeOut(slow); 
    }, 5000); 

}); 
+1

あなたの答えを見つけるために、この記事を見てください。 http://stackoverflow.com/questions/2578628/how-to-stop-override-a-jquery-timeout-function – theblindprophet

+0

リンクありがとう - 私は多くの研究を行い、停止を扱ったこのリンク以上のものを発見しましたタイムアウトを実行する方法はわかりませんでしたが、変数に変数を格納した後にタイムアウトを実際にどのように実行するのか分からないので、タイムアウトを変数として保存する方法とタイムアウトを実行する方法 – scmccarthy22

答えて

3

すでに設定されている場合は、タイムアウトをクリアする必要があります。

var to = null; 
$('button').on('click', function() { 

    if(to){ 
    clearTimeout(to); 
    } 
    //need function here to stop the timeout if running 

    $("#myDiv").fadeIn(slow); 

    to = setTimeout(function(){ 
    $("#myDiv").fadeOut(slow); 
    }, 5000); 

}); 

clearTimeout()機能は、ユーザーが最初のタイムアウトが削除されたボタンを二回クリックしてくださいので、もしタイムアウトを削除して、唯一の番目のインスタンスなります実行される。

あなたはこれだけではjQueryのAPIメソッドに建て使用して行うことができます
1

  • stop()

  • delay()

    $('button').on('click', function() { 
        $("#myDiv") 
         .stop(true,true) // resets current animation queue 
         .fadeIn('slow') 
         .delay(5000)// delays anything in queue 
         .fadeOut('slow'); 
    }); 
    

    参考文献を読むために少し簡単なものにします

DEMO

関連する問題