html - 平滑用户在 Canvas 中绘制的线条

标签 html canvas

我正在使用 <canvas>以签名的形式捕获用户输入,并试图弄清楚如何平滑鼠标输入。

我想我需要逐 block 处理用户的鼠标移动并平滑每个 block ,我不是在 super 平滑之后,但对锯齿状输入的任何改进都会很好。

谢谢, 标记

最佳答案

你想要的是:

ctx.lineCap = 'round';

这是一个如何使用它的例子:

试一试 http://jsbin.com/ateho3

标记:

<canvas id="canvas"></canvas> 

JavaScript:

window.onload = function() {
    var canvas = document.getElementById('canvas');
    var ctx = canvas.getContext('2d');
    var width  = window.innerWidth;
    var height = window.innerHeight;
    canvas.height = height;
    canvas.width = width;
    canvas.addEventListener('mousedown', function(e) {
      this.down = true;  
      this.X = e.pageX ;
      this.Y = e.pageY ;
      this.color = rgb();
    }, 0);
    canvas.addEventListener('mouseup', function() {
      this.down = false;      
    }, 0);
    canvas.addEventListener('mousemove', function(e) {
      this.style.cursor = 'pointer';
      if(this.down) {
          ctx.beginPath();
          ctx.moveTo(this.X, this.Y);
          ctx.lineCap = 'round';
           ctx.lineWidth = 3;
          ctx.lineTo(e.pageX , e.pageY );
          ctx.strokeStyle = this.color;
          ctx.stroke();

         this.X = e.pageX ;
         this.Y = e.pageY ;
      }
    }, 0);

    function rgb() {
      color = 'rgb(';
      for(var i = 0; i< 3; i++) {
        color += Math.floor(Math.random() * 255)+',';
      }
      return color.replace(/\,$/,')');
    }    
  };

关于html - 平滑用户在 Canvas 中绘制的线条,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3783419/

相关文章:

jquery - 停止滚动的滚动列

jquery - 以编程方式在可排序之间移动 li 标签

javascript - 拆分时超出最大调用堆栈大小

javascript - Canvas for() 循环、lineTo() 和 closePath()

javascript - 如何将滚动条添加到 HTML5 Canvas 中的矩形?

android - 捏缩放后获得正确的坐标(画线)Android Canvas

javascript - 如何防止用户切换使用 Bootstrap 按钮组创建的复选框按钮

使用事件处理程序生成 DOM 元素的 Javascript 外部函数不输出 html

html - Bootstrap Nav Bar 覆盖颜色在 JSFiddle 中有效,但在我正在处理的代码中仍然是纯灰色

javascript - Html5 Canvas Javascript 库?