こちらのサイトを参考に
http://game.guide.withabout.net/guide_game/gp333/about/s/part2/w/w03/w03_6.htm
キーをおした文字(英単語)を順番に画面に表示させています。
順番に押したキーを、↓のように連続で表示させています。
inpwd += '<span class="答えの枠"'
inpwd += ' style="color:orange; '
inpwd += ' font-size:30px;font-weight:900">'
inpwd += String.fromCharCode(getKEYCODE(e))
inpwd += '</span>'
キーボードのバックスペースをおした時(つまりキー入力を間違った時)、入力した文字を1つ消したいのですが
if(getKEYCODE(e) == '8'){ inpwd -=' '}
などとやってみたのですが、だめでした。(入力した文字を1つ消したい)
また、文字を入力するところに常にカーソルの点滅を出したいのですが、↑のようなやり方では
難しいでしょうか?
ブラウザは、firefoxです。アドバイス頂けたら幸いです。宜しくお願いします。
文字を消すには、String#substring を使って末尾の一文字を消します。
key_Press 関数をこんな感じにします。
function key_Press(e){ var ret = true; // ★ var keycode = getKEYCODE(e); // ★ getKEYCODE は一回だけ呼ぶ if(keycode == '13'){ // ★ 変数を参照 inpwd += '<BR>' //13なら改行する } else if(keycode == 8){ // ★ BS なら一文字消す inpwd = inpwd.substring(0, inpwd.length - 1); ret = false; // ★ 「戻る」を無効にする } else { inpwd += String.fromCharCode(keycode) // ★修飾無しの文字だけ } outputLAYER('inputbox',inpwd) return ret; // ★「戻る」を無効にする }
元のソースをなるべく残しましたが、却って分かりにくくなったかも。
バックスペースには、前のページに戻る、という元々の動作があるので、key_Press 関数の戻り値で false を返して、元の動作を無効にしています。
修飾用のタグが入ると邪魔くさいので、スクリプトから HTML の方に移動しました。
その関係で、outputLAYER 関数も、少し変えてます
function outputLAYER(layName,html){ if(document.getElementById){ //N6,Moz,IE5,IE6用 document.getElementById(layName).firstChild.innerHTML=html // ★ ↑firstChild が入ります
HTML は、こんな感じです。
<!--このレイヤ-の中へ文字を出力します--> <div class="input" id="inputbox" style = " position : absolute ; left : 100px ; top : 100px ; "><span class="input" style="color:orange; font-size:30px;font-weight:900"></span> <!-- ★ 文字の修飾は、こっちに持ってきた --> <span class="cursor">_</span></div> <!-- ★ カーソル用 -->
文字修飾用の SPAN の後に、もうひとつカーソル用の SPAN を追加しました。
アンダースコアが入ってます。
点滅は、CSS のアニメーションでやります(他にも、方法はあります)。
<style> /* ★カーソルの点滅用 */ .cursor { font-size: 30px; color: green; animation-name: blink; animation-duration: 1s; animation-timing-function: linear; animation-iteration-count: infinite; } @keyframes blink { 0% { opacity: 1.0; } 50% { opacity: 0.0; } 100% { opacity: 1.0; } } </style>
緑色のアンダースコアが 1秒周期で点滅するようにしました。
参考にしているページに上記の変更を加えたものを jsFiddle に置きました。
https://jsfiddle.net/a_kuma3/y6bpu7ku/embedded/result/
フォーカスの移動がうまくいってないので、一度 ウィンドウの中をマウスでクリックしてから確認してみてください。