我的处女作《Canvas系列教程》在我的Github上正在连载更新,希望能得到您的关注和支持,让我有更多的动力进行创作。
教程介绍、教程目录等能在README里查阅。
介绍
前面我们已经介绍了画板上矩形框的画法,现在我们来介绍圆的画法。
在之前的教程中,我们说过除了绘制线段之外,可以通过重新实线drawRubberbandShape()函数来支持其他图形的绘制。这节课便是对上节课的补充和说明。
传递给drawRubberbandShape()方法的loc对象包含鼠标当前的X,Y坐标。鼠标按下事件发生的地点记录在名为mousedown的变量之中,它和loc对象一样,也包含一对X,Y坐标。
通过这两组坐标,算出二者的连线长度,将此值作为半径画圆即可。(这种方法是从圆心拉向周围的以半径为基准的画法,以直径为基准的画法请参考矩形选区的画法,这里不再过多示范)
我们重写这个函数,实线圆形的绘制。
function updateRubberbandCircle(loc) {
rubberbandRect.width = Math.abs(loc.x - mousedown.x);
rubberbandRect.height = Math.abs(loc.y - mousedown.y);
var angle, radius;
if (mousedown.y === loc.y) {
radius = Math.abs(loc.x - mousedown.x);
console.log(radius);
} else {
//反正切函数
console.log(rubberbandRect.height + '+' + rubberbandRect.width);
radius = Math.sqrt(Math.pow(rubberbandRect.height, 2) + Math.pow(rubberbandRect.width, 2));
}
context.beginPath();
context.arc(mousedown.x, mousedown.y, radius, 0, Math.PI * 2, false);
context.stroke();
if (rectangle) {
context.fillStyle=strokeStyleSelect.value;
context.fill();
}
}
代码完成之后,因为复用的画线段版本的代码,所以还需要进行少许其他代码的修改,最终效果如下。
这样,我们就可以通过修改颜色和实心选项,随心所欲地画圆了。
现在我们里Canvas画板又进了一步。