スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。



mirrorMan - フォーカスローテート2

2はソースです。
function moveSelItm(){
var eID, iID = cntSelItmId(), iLR = getLR(2);
if((event.keyCode==37)||(event.keyCode==39)){
if(/^txt0|^txt2/.test(event.srcElement.className)) return;
if(/itmRnmFrm/.test(event.srcElement.id)) return;
}
setEventRetFalse();
switch(event.keyCode){
case 37://←
case 39://→
iLR = iLR ? iLR = 0 : iLR = 2;
eID = getLR(1) + iID; break;
case 38://↑
if(iID) eID = getLR(0) + --iID;
else if(!iLR){
eID = getLR(0) + lftPains.Count;
iID = lftPains.Count;
}else{
eID = getLR(0) + rhtPains.Count;
iID = rhtPains.Count;
} break;
case 40://↓
if(iID) eID = getLR(0) + ++iID;
else{
eID = getLR(0) + ++iID;
if(!document.all(eID)) return;
}
}
if(document.all(eID)){
cntSelItmId(iID);
selItmLR.innerText = iLR;
if(document.all(eID).firstChild.id =="itmRnmFrm")
txtBoxFocus(document.all(eID).firstChild);
else{
selItm(document.all(eID));
keyDowns.innerText ="";
}
}else if(iID > 0){
switch(event.keyCode){
case 37://←
case 39://→
cntSelItmId(iID -1); break;
case 40://↓
cntSelItmId(0);
}
return moveSelItm();
}
}

方向キーが押されるたびに呼び出されるfunctionです。
cntSelItmId()は、フォーカスのあるアイテムのインデックス番号を返します。番号は上から順に0,1,2です。
押されたキーが←か→であれば、テキストボックスが表示中かどうかをチェックして処理を行わずに返します。
setEventRetFalse()はevent.returnValue = false;をしています。たとえばウインドウにスクロールバーが表示されてい場合に、IEの方向キーでの画面スクロール動作が同時に行われてしまうのをオフにしています。
その次のswitch文はフォーカス移動先のインデックス番号を求める処理です。方向キーでは一度に一つしかフォーカスは移動しないので、インクリメントかデクリメントのみですね。
lftPains、rhtPainsの自前オブジェクトは、画面更新時にそれぞれのペインのファイル/フォルダのオブジェクトを格納していて、それらの数のCountプロパティも追加しています。このCountプロパティ値で、左右ペインを移動したときに一番下のファイルにフォーカスを移るようにしています。

そして、求めたeIDは見てのとおりタグのid属性値というわけです。その要素が存在すればそちらへ、なければ再帰的に呼びなおすことでフォーカスローテートさせています。最初に考えていたよりコンパクトにできたので、これもお気に入りロジックです。



スポンサーサイト



comment

Secret

while(aho.atEndofStream)

笹部 政宏
笹部 政宏
mail




フリーソフツ
Category
はてブ
Monthly Archive
New Entry
New Comment
New Trackback
RSS
Copyright © Kittens flewby me All Rights Reserved.

FC2Ad

上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。