2016-10-28 20 views
2

ウェブサイト(Parchmentから生成)を表示したときに、私のインフォームゲームでテキストカーソル(キャレット)をカスタマイズする効果的な方法を探しています。入力ボックスに従うカスタムカーソルの位置を設定するにはどうすればいいですか?

私はthis exampleの作業に取り組んでいますが、Javascriptについての私の知識は不安定です。私が作成したカスタムテキストカーソルを強制的に置き換える方法は不明です。

I have a demo here元の入力フィールドは引き続き表示されます。カスタムカーソルは左上隅にあり、選択すると点滅します。どうすればこれを達成できますか?

+0

を? https://jsfiddle.net/whwv3cb4/ – PaulBGD

答えて

1

私の見解は、入力を隠すことです(これは多くのアプリがGoogleドキュメント、アトム、vscodeなどのようになります)。そして偽のカーソルと "入力"ボックスを作成します。そのためのコードは、何かのようになります:

var input = document.getElementById('input'); 
var output = document.getElementById('output'); 

input.addEventListener('keyup', function() { 
    output.removeChild(document.getElementById('cursor')); 
    output.innerHTML += input.value; 
    input.value = ''; 
    makeCursor(); 
}); 

document.addEventListener('click', function() { 
    input.focus(); 
}); 

function makeCursor() { 
    var cursor = document.createElement('div'); 
    cursor.setAttribute('id', 'cursor'); 
    output.appendChild(cursor); 
} 
makeCursor(); 

と私はここで実行可能な例があります。このようhttps://jsfiddle.net/whwv3cb4/2/

+0

これは素晴らしいですね、ありがとう。 :) Idの代わりに入力のクラスをターゲットにするのに問題があります。なぜ私はgetElementsByClassnameを使用できないのですか?私はフィドルを更新しました。 Parchmentは、ロード時に独自のコードを生成し、行が移動するたびに一意のIDを入力に割り当てるため、代わりにLineInputクラスでターゲティングする必要があります。 – user610455

+0

フィドルを更新すると、新しいリンクが作成されるので、それを私に送信する必要があります:) getElementsにもSがあるので、おそらく1つ以上の要素が返されています。試してみてくださいgetElementsByClassname( "")[0] – PaulBGD

関連する問題