【发布时间】:2016-06-05 05:51:24
【问题描述】:
我正在用画布绘制折线图。图表是响应式的,但线条必须具有固定的宽度。
我用 css 让它响应
#myCanvas{
width: 80%;
}
,所以笔画被缩放了。
我找到的唯一解决方案是通过画布的宽度属性与其实际宽度之间的比例来获取 lineWidth 的值。 要应用它,我会在调整大小时清除并绘制画布。
<canvas id="myCanvas" width="510" height="210"></canvas>
<script type="text/javascript">
var c = document.getElementById("myCanvas");
var ctx = c.getContext("2d");
function draw(){
var canvasattrwidth = $('#myCanvas').attr('width');
var canvasrealwidth = $('#myCanvas').width();
// n sets the line width
var n = 4;
var widthStroke = n * (canvasattrwidth / canvasrealwidth) ;
ctx.lineWidth = widthStroke;
ctx.beginPath();
ctx.moveTo( 0 , 10 );
ctx.lineTo( 200 , 100 );
ctx.stroke();
}
$(window).on('resize', function(){
ctx.clearRect(0, 0, c.width, c.height);
draw();
});
draw();
</script>
这是我的第一个画布,我认为有一种更简单的方法可以固定 lineWidth(不是在每次调整大小时都清除和绘制),但我找不到它。
有一个类似问题的问题
html5 canvas prevent linewidth scaling 但是使用 scale() 方法,所以我不能使用该解决方案。
【问题讨论】:
-
不,重绘是要走的路。如果您正在以任何方式更改在画布上绘制的内容(并且不想在已有的内容之上绘制),则需要重新绘制。您希望线条在调整大小时保持相同的像素宽度,如果不重绘,这将无法正确完成。无论如何,重绘对于图表之类的东西并不是很费力。
标签: javascript css html canvas