2016-06-01 2 views
-1

私は一度クリックした後、一時的(24時間)に機能しないようにしようとしています。私はMSは86400000.24時間機能を無効にする

ある日にカウント設定のsetTimeout()関数の中で全体を包む試してみました

(出力hereを参照してください)

$('.dates').click(function() { 
    var rand = Math.floor(Math.random() * 100 + 1); 
    var flows = ["flowOne", "flowTwo", "flowThree"]; 
    var colors = ["colOne", "colTwo", "colThree", "colFour", "colFive", "colSix"]; 
    var timing = (Math.random() * (1.3 - 0.3) + 1.6).toFixed(1); 
    // Animate Particle 
    $('<div class="particle part-' + rand + ' ' + colors[Math.floor(Math.random() * 6)] + '" style="font-size:' + Math.floor(Math.random() * (30 - 22) + 22) + 'px;"><i class="fa fa-heart-o"></i><i class="fa fa-heart"></i></div>').appendTo('.particle-box').css({ 
    animation: "" + flows[Math.floor(Math.random() * 3)] + " " + timing + "s linear" 
    }); 
    $('.part-' + rand).show(); 
    // Remove Particle 
    setTimeout(function() { 
    $('.part-' + rand).remove(); 
    }, timing * 1000 - 100); 
    $('#output').html(function(i, val) { 
    return parseInt(val, 10) + 1; 
    console.log(val); 
    }); 
    return false; 
}); 

私は欠けているものがあります?

24時間ごとに呼び出すことができるように関数を延期するにはどうすればよいですか?

+3

遅延が長い場合、永続性を助けるためにcookieまたはlocalStorageの使用を検討することがあります。 –

+0

@PatrickRobertsどのように? – user3421197

+0

何が間違っていて、あなたの希望する結果が何であるかを明確に述べていないので、私は知らない。 –

答えて

3

残りのアプリケーションが上記の関数とやり取りする方法を変更せずに、関数が実行されないようにするには、何らかの種類のフラグまたはブール条件を使用する必要があります。例えば

:さて、現在の時刻から24時間を計算するための最も簡単な方法は、ミリ秒単位で現在の時刻を取得するためにDate.nowを使用して、おそらくです

$('.dates').click(function() { 
    if (!isActive) { 
    return; 
    } 

    // rest of your code 
}); 

その値を、ミリ秒単位で、24時間を追加。あなたはおそらくlocalStorageでこれを保存したいと思う、待ちたいどのくらい考える

// Calculate 24 hours in milliseconds 
var second = 1000; 
var minute = 60 * second; 
var hour = 60 * minute; 
var day = 24 * hour; 

var now = Date.now(); 
var tomorrow = now + day; 

localStorage.setItem('next-active-time', tomorrow); 

あなたがしなければならないすべてはあなたが機能をアクティブにする方法を変更です。むしろ単純なフラグを使用するよりも、ローカルストレージ内の次の値をチェックしだけでは

  • まだ作成されていない
  • 現在時刻がその時刻
以上である場合に活性化
$('.dates').click(function() { 
    // default to 0 when it hasn't been set 
    var nextActiveTime = localStorage.getItem('next-active-time') || 0; 
    if (Date.now() < nextActiveTime) { 
    return; 
    } 

    // rest of your code 
    // make sure to update local storage at this point 
}); 
+0

あなたはJSFiddleのように見えるべきものを置くことができますか? – user3421197

+0

@ user3421197私はすべてのビルディングブロックをあなたに与えました。一緒に置くのはあなた次第です。あなたがそれについて考えるならば、実際にはむしろ単純です。 –

+0

@MikeC localStorageは、さまざまなブラウザやデバイス間で持続しないことに言及する価値はあると思います。 –

0

理論的には、lodashのthrottle(または同様の実装)を使って何をしようとしていますが、ブラウザでプログラミングしているように見えるので、この24時間ルールを強制することはできませんいつでもページをリフレッシュすることができます)。そのことを言った:あなたはそれを強制する気にしないのであれば

  • は、lodashの throttleのコピーを取得。
  • localstorage(私はthisライブラリをお勧めします)を使用するか、最新のブラウザのみをサポートしている場合は、indexedDBをラベラーthis
  • 本当に(ブラウザやデバイスを介して)強制したい場合は、ユーザーを認証し、バックエンドでセッションを追跡する必要があります。この経路はこの質問の対象外ですので、ここでは終了します。

少しクリアすることを願っています。

関連する問題