0
私はキャンバスを使ってこのグラフを作った。しかし、このグラフは応答性がなく、新しいサイズに応じて描画することで応答性を持たせようとしたときに、古いラインは新しいラインと一緒に画面に残っていました。何度も何度も描画せずに各行のサイズを変更するにはどうすればよいですか?キャンバスグラフを反応的にするには?
-
function drawShape(a, b, c, d, e, f, g, h, i, j, k, l) { var canvas = document.getElementById('linegraph1'); var value = new Array(a, b, c, d, e, f, g, h, i, j, k, l); var ctx = canvas.getContext('2d'); for (i = 1; i < 13; i++) { { ctx.beginPath(); ctx.lineWidth = 9; ctx.lineCap = 'round'; ctx.strokeStyle = '#FFFFFF'; ctx.moveTo(7 + i * 30, 50); ctx.lineTo(7 + i * 30, 150); ctx.stroke(); } { ctx.beginPath(); ctx.lineWidth = 9; ctx.lineCap = 'round'; ctx.strokeStyle = '#EFF2FB'; ctx.moveTo(7 + i * 30, 50); ctx.lineTo(7 + i * 30, 150); ctx.stroke(); } ctx.lineWidth = 9; ctx.beginPath(); ctx.moveTo(7 + i * 30, 150); if (value[i - 1] > 100) { var buffer = 50; } else { var buffer = 150 - value[i - 1]; } ctx.lineTo(7 + i * 30, buffer); if (value[i - 1] > 80) { ctx.strokeStyle = '#B60114'; } else { ctx.strokeStyle = '#0093CF'; } ctx.lineCap = 'round'; ctx.lineCap = 'round'; ctx.font = "15px Arial"; ctx.fillText(value[i - 1], 1 + i * 30, 180); ctx.stroke(); } ctx.beginPath(); ctx.font = "15px Arial"; ctx.fillText("0", 400, 150); ctx.fillText("25", 400, 105); ctx.fillText("50", 400, 60); ctx.fillText("mb", 400, 180); }
<div> <canvas id="linegraph1" width="450" height="200" style="border:1px solid grey; border-radius: 10px;"> </div> <button onclick="drawShape(10, 20, 80, 45, 55, 88, 74, 41, 45, 12, 21, 12)">Draw Graph</button>
can can can can can can ....画像のようなものです....新しいものを作成中に古いものを破棄する必要があります – Kenny
オリジナルのキャンバスのコンテンツをコピーする仮想 'キャンバス'を作成します( 'drawImage( ) ')であれば、新しい幅と高さを前の幅と高さで割ったように、スケール差をパーセンテージで計算する必要があるので、簡単な' clearRect() 'の後にコンテキストを' scale() 'してから、仮想キャンバスを元のものに戻す – d3vi4nt
私はSVGが好きです。 https://css-tricks.com/using-svg/ – ne1410s