HTML5画布笔画()粗而模糊

Non*_*biz 28 javascript html5 canvas stroke

我试图让用户在画布上绘制一个矩形(如选择框).我得到了一些可笑的结果,但后来我发现,从我的参考,甚至只是想代码在这里,我得到巨大的模糊线,不知道为什么.

它托管在dylanstestserver.com/drawcss.javascript是内联的,所以你可以检查出来.我正在使用jQuery来简化鼠标坐标.

小智 59

如果使用css设置画布高度和宽度而不是在canvas元素中设置高度和宽度,则会出现模糊问题.

<style>
  canvas { height: 800px; width: 1200px; }      WRONG WAY -- BLURRY LINES
</style>

<canvas height="800" width="1200"></canvas>     RIGHT WAY -- SHARP LINES
Run Code Online (Sandbox Code Playgroud)


cla*_*rkf 36

出于某种原因,你的画布被拉伸了.因为你将css属性width设置为100%,所以它从某种原生大小扩展它.这是使用css width属性和标记width上的属性之间的区别<canvas>.您可能想尝试使用一些javascript来填充视口(请参阅jQuery .width()):

jQuery(document).ready(function(){
    var canvas = document.getElementById('drawing');
    canvas.width(($(window).width()).height($(window).height());
    var context = canvas.getContext('2d');
    //...
Run Code Online (Sandbox Code Playgroud)

  • 这条评论对我有帮助,但有一些错误.这是适合我的代码版本.由于您使用了getElementById,因此没有.width()或height()函数.`var canvas = document.getElementById('drawing');``canvas.width = parent.width();``canvas.height = parent.height();` (2认同)

mil*_*lla 10

我这样做的方法是将canvas元素设置为css中的宽度和高度,然后设置canvas.width = canvas.clientWidth和canvas.height = canvas.clientHeight

var canvas =  document.getElementById("myCanvas");
canvas.width = canvas.clientWidth;
canvas.height = canvas.clientHeight;
var context = canvas.getContext("2d");
Run Code Online (Sandbox Code Playgroud)

  • 这是一个不错的选择,因为它允许您在 CSS 中设置大小,它自然属于 IMO。 (2认同)