2017-12-08 9 views
0

今のところ、キーが押されると色が変わり、すぐに色が変わります。しかし、これは本当に速く、ちょっとした片頭痛の原因となります。は関数を実行し、次の関数の実行を一時停止します。JS

キーを押したときに変更を保存すると、2〜2秒間の変更が保存され、元の色に戻ります。これらの内部にない他の機能を一時停止することはありません。このライン間

$(window).on('keydown', function (e) { 
 
    if (e.keyCode == 39 || e.keyCode == 32) { 
 
     $('body').css('background', '#26A65B'); 
 
     $('#word').css('color', '#415A77'); 
 
    } 
 
    if(e.keyCode == 37) { 
 
     $('body').css('background', '#D64541'); 
 
     $('#word').css('color', '#415A77'); 
 
    } 
 
    }); 
 
$(window).on ('keyup', function (e) { 
 
    if (e.keyCode == 39 || e.keyCode == 32 || e.keyCode == 37) { 
 
     $('body').css('background', '#415A77'); 
 
     $('#word').css('color', '#ed7d3a'); 
 
    } 
 
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>

+1

ある程度の期間の後にいくつかのコードを実行するには、 'setTimeout'を使用することができます。 https://developer.mozilla.org/en-US/docs/Web/API/WindowOrWorkerGlobalScope/setTimeout –

+0

またはこれにはライブラリを使用できます:https://stackoverflow.com/questions/8323474/jquery-how-to- 1つの色から別の可能性のあるサードパーティのプラグインへのフェードイン – vaso123

+0

@LaurynasStomaスニペットを挿入する場合は、左側にJQueryを含めることができます。 –

答えて

0

何かがあなたを助ける必要があります。あなただけsetTimeoutはあなたを助けるないため,,それぞれの新しいKeyDownイベントがちょうどsetTimeoutを壊す原因となり、その後、片頭痛効果:)左右の矢印キーで

テストをする機会を増やす、ヘルパーなど、いくつかのフラグ変数を配置する必要があります:

$('body').focus(); 
 
var flag = false; 
 
$(window).on('keydown', function (e) { 
 
    if (flag) return; 
 
    if (e.keyCode == 39 || e.keyCode == 32) { 
 
     $('body').css('background', '#26A65B'); 
 
     $('#word').css('color', '#415A77'); 
 
    } 
 
    if(e.keyCode == 37) { 
 
     $('body').css('background', '#D64541'); 
 
     $('#word').css('color', '#415A77'); 
 
    } 
 
    }); 
 
$(window).on ('keyup', function (e) { 
 
    if(flag) return; 
 
    if(! flag) flag = true; 
 
    setTimeout(function(){ 
 
     flag = false; 
 
     if (e.keyCode == 39 || e.keyCode == 32 || e.keyCode == 37) { 
 
     $('body').css('background', '#415A77'); 
 
     $('#word').css('color', '#ed7d3a'); 
 
     } 
 
    }, 2000); 
 
    });
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>

0

それぞれからkeyupにtimeoutを使用してください。すでにタイムアウトが実行されている場合は、clear itと別のタイムアウトを設定します。

let timeout = null; 
 
$(window).on('keydown',(e => { 
 
    if (e.keyCode == 39 || e.keyCode == 32) { 
 
    $('body').css('background', '#26A65B'); 
 
    $('#word').css('color', '#415A77'); 
 
    } 
 
    if (e.keyCode == 37) { 
 
    $('body').css('background', '#D64541'); 
 
    $('#word').css('color', '#415A77'); 
 
    } 
 
})); 
 
$(window).on('keyup',(e => { 
 
    if (e.keyCode == 39 || e.keyCode == 32 || e.keyCode == 37) { 
 
    if (timeout !== null) { 
 
     clearTimeout(timeout); 
 
    } 
 
    timeout = setTimeout(() => { 
 
     $('body').css('background', '#415A77'); 
 
     $('#word').css('color', '#ed7d3a'); 
 
    }, 2000); 
 
    } 
 
}));
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<div id="word">Hello</div>

関連する問題