2016-07-27 7 views
0

keydownを使用してキャンバスでの表示を試みましたが、「バックスペース」を押すか、テキストを削除しても削除されません。キャンバスへのhtml入力がバックスペースを受け入れる

var canvas = document.getElementById('myCanvas'); 
 
var context = canvas.getContext('2d'); 
 

 
// do cool things with the context 
 
context.font = '40pt Calibri'; 
 
context.fillStyle = 'blue'; 
 
$('input').keydown(function(e){ 
 
     
 
    if(e.keyCode==8) 
 
    { 
 
    var newvalue = $(this).val(); 
 
    context.fillText(newvalue, 150, 100); 
 
    } 
 
}); 
 
$('input').keyup(function(){ 
 
    context.fillText($(this).val(), 150, 100); 
 
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.0.0/jquery.min.js"></script> 
 
<input type="text" value=""> 
 
<canvas id="myCanvas" width="578" height="200"></canvas>

+0

キャンバスがそのように動作しませんが、あなたはオフにして、それを再描画(または図面に追加)する必要があります。キャンバスは絵のように絵画的に描かれていますが、その上にテキストをペイントしています。あなたがしていることを模倣したライブではありません。変更されたテキストを消去してから再描画するには、おそらく 'canvasContext.clearRect(0,0、canvas.width、canvas.height)'が必要です。今は同じテキストを何度も繰り返しペイントしています。 – somethinghere

答えて

0

あなたはどんな既に満たされたピクセルを削除するために再描画する前に、あなたのキャンバスをクリアする必要があります:

あなたは気づいているかもしれませんが
context.clearRect(0, 0, canvas.width, canvas.height); 

、それはあなたの文字を削除しませんでした、別の文字を入力した場合は、前の文字に重ねて表示されるため、再描画する前にクリアする必要があります。

var canvas = document.getElementById('myCanvas'); 
 
var context = canvas.getContext('2d'); 
 

 
// do cool things with the context 
 
context.font = '40pt Calibri'; 
 
context.fillStyle = 'blue'; 
 
$('input').keydown(function(e){ 
 
    if(e.keyCode==8){ 
 
    var newvalue = $(this).val(); 
 
    context.clearRect(0,0,canvas.width,canvas.height); 
 
    context.fillText(newvalue, 150, 100); 
 
    } 
 
}); 
 
$('input').keyup(function(){ 
 
    context.clearRect(0,0,canvas.width,canvas.height); 
 
    context.fillText($(this).val(), 150, 100); 
 
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.0.0/jquery.min.js"></script> 
 
<input type="text" value=""> 
 
<canvas id="myCanvas" width="578" height="200"></canvas>

+0

ありがとう、それは動作します –

0

あなたはキャンバスをクリアするclearRect(0、0、canvas.width、canvas.height)を使用することができ、以下のスニペットを確認してください。
キーアップの両方が必要なのではないかと思います& keydownイベント。

var canvas = document.getElementById('myCanvas'); 
 
var context = canvas.getContext('2d'); 
 

 
// do cool things with the context 
 
context.font = '40pt Calibri'; 
 
context.fillStyle = 'blue'; 
 

 
$('input').keyup(function() { 
 
    context.clearRect(0, 0, canvas.width,canvas.height); 
 
    context.fillText($(this).val(), 150, 100); 
 

 
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<input type="text" value=""> 
 
<canvas id="myCanvas" width="578" height="200"></canvas>

関連する問題