特定のキーを押したときに背景色を変更しようとしています。たとえば、「r」キーを押しているときは、背景が赤になります。 'r'キーが押されなくなったとき、背景はデフォルトで白になっているはずです。
$(document).ready(function () {
$('body').keydown(function(e){
if(e.keyCode == 114){
$(this).css({'background':'red'});
}
if(e.keyCode == 121){
$(this).css({'background':'yellow'});
}
});
$('body').keypress(function(e){
if(e.keyCode == 114){
$(this).css({'background':'red'});
}
if(e.keyCode == 121){
$(this).css({'background':'yellow'});
}
});
$('body').keyup(function(e){
if(e.keyCode == 114){
$(this).css({'background':'white'});
}
if(e.keyCode == 121){
$(this).css({'background':'white'});
}
});
});
私が抱えている問題は、キーアップが個々のキーごとに特別に機能していないことです。
$('body').keyup(function(e){
$(this).css({'background':'white'});
});
キーアップからif条件を完全に削除すると、希望どおりに動作することはわかっていますが、後で特定のキーでキーアップを使用してさまざまなことを実行できるようにしたいと考えています。たとえば、「b」キーだけを離すと、画面に「bキーを離しました!」のように表示される場合があります。特定のキーのキーダウンイベントとキーアップイベントを追跡し、それぞれに異なることを発生させるにはどうすればよいですか?私はこれもあまり組織化されていないことを知っています(私はこのようなものにかなり慣れていません)ので、これを行うための完全に異なるより良い方法がある場合...
ご参考までに R = 82
$(document).ready(function () {
$('body').on('keydown keyup',function(e){
var color = e.type=="keydown" ? 'red' : 'white' ;
if(e.which==82){
$(this).css({background: color});
}
});
});
オブジェクト指向の例は、目的のKEYのアクションのリストを作成することです。
LIVE DEMO
$(document).ready(function () {
$('body').on('keydown keyup', function( e ) {
var key = e.which;
var io = e.type=="keydown" ? 0 : 1; // "0"if keydown; "1" if keyup
var keyAction = { // Object to store our stuff
// keyCode : [(0)KEYDOWN, (1)KEYUP]
82 : ['red' ,'white'], // R key
66 : ['blue','white'] // B key (last one without comma!)
};
var propObj = {}; // Object to store property + value for jQuery methods
var keyArr = keyAction[key];
if(typeof keyArr != 'undefined') { // Test keyArr (82, 66) is returned/populated to prevent errors
propObj.background = keyAction[key][io]; // Created the jQ Method's object e.g: {background:"red"}
$(this).css(propObj); // Finally create / use
}
});
});
ここで、三項演算子(?:)の代わりに使用したもの:
var io = e.type=="keydown" ? 0 : 1;
次のようなNOTビット演算子を使用することもできます。
var io = ~~(e.type=="keyup"); // evaluating false|true == 0|1
どの方法でも(指定された「キーダウン」/「キーアップ」から)どのイベントが発生しているかを知り、目的の配列位置を取得する必要があります[0]
、[1]
必要なプロパティ値の例:["red"]
、["white"]
(ここで、「赤」== 0および「白」== 1)
もっと advanced way DEMO 上記のうち、リストに追加することもできます
その結果、次のようになります。
$(document).ready(function () {
$('body').on('keydown keyup', function(e) {
var keyAction = {
82 : ['body', 'css', "background", ['red','white'] ], // R key
66 : ['body', 'css', "background", ['blue','white'] ], // B key
72 : ['h1', 'animate', "top", [100,30] ] // H key
},
key = e.which, // Get the keyCode
keyArr = keyAction[key], // get our array from our list
io = e.type=="keydown" ? 0 : 1, // io will be 0 || 1 depending if key is down or up
element,
method,
property={}; // the Method Properties Object will look like e.g: {"background":"red"}
if(typeof keyArr != "undefined"){
element = keyArr[0],
method = keyArr[1],
property[keyArr[2]] = keyArr[3][io];
$(element)[method](property); // do stuff
}
console.log( key, io, element, method, property);
});
});
あなたもあなたの B キーを押して、 H 同時アクションを実行するためのキー。
ご不明な点がございましたら(お気軽にお問い合わせください)。
[〜#〜]編集[〜#〜]
CSSクラスを制御したい場合: