【发布时间】:2015-07-24 21:24:06
【问题描述】:
我有两个画布元素,需要在单击按钮时调整它们的大小。
<div class="sDetails"><div>
<div id="canvasDiv" style="width: 310px;"><canvas id="canvasGraph"></canvas></div></div>
<div class="kDetails"><div><div>
<div id="canvasDiv" style="width: 310px; height: 240px;"><canvas id="canvasGraph"></canvas></div></div>
和脚本:
var sketch;var sketch_sl;var onPaint;var canvas=null;var ctx=null;var tmp_ctx=null;
function drawCanvas(div) {
canvas = document.querySelector(div + " #canvasGraph");
ctx = canvas.getContext('2d');
sketch = document.querySelector(div + " #canvasDiv");
sketch_sl = getComputedStyle(sketch);
canvas.width = parseInt(sketch_style.getPropertyValue('width'));
canvas.height = parseInt(sketch_style.getPropertyValue('height'));
tmp_canvas = document.createElement('canvas');
tmp_ctx = tmp_canvas.getContext('2d');
tmp_canvas.id = 'tmp_canvas';
tmp_canvas.width = canvas.width;
tmp_canvas.height = canvas.height;
sketch.appendChild(tmp_canvas);
重绘功能:
// here I must redraw my lines resized 2 times ( *cScale ) where cScale=2 or =1
function drawScales(ctx, canvas)
ctx.strokeStyle = 'green';
ctx.fillStyle = 'green';
ctx.beginPath();
ctx.moveTo(5, 0);
ctx.lineTo(0, canvas.height);
scaleStep = 24*cScale;
由于某种原因,它的效果非常糟糕,旧职位仍然存在。 有没有办法完全删除整个画布并附加它或完全重绘它?
我试过canvas.width=canvas.width,试过ctx.clearRect(0, 0, canvas.width, canvas.height);tmp_ctx.clearRect(0, 0, canvas.width, canvas.height);,试过$(".sDetails #canvasGraph")[0].reset();
从逻辑上讲,drawCanvas(".sDetails");drawLines(ctx, canvas); 应该从头开始重新绘制它,但它不会。
【问题讨论】:
-
为什么在调整大小时需要重绘画布?它的尺寸真的取决于窗口大小吗?如果是这样,你为什么要在画布上用 css 样式设置固定尺寸(宽度/高度)?
-
@hindmost 我有一个坐标系统,当按下按钮时,画布会变宽两倍,从而在用户绘制时更精确地捕获 x 坐标。..
标签: javascript jquery html canvas redraw