canvas快速绘制圆形、三角形、矩形、多边形方法介绍


Posted in Javascript onDecember 29, 2016

想看前面整理的canvas常用API的同学可以点下面:

本系列文章涉及的所有代码都将上传至:http://wd.3water.com:81//201612/yuanma/About-Canvas-master_3water.rar

从本篇文章开始,我会分享给大家canvas绘制的各种基础图形和酷炫的图形,注意:是一系列!欢迎关注!

后续每篇文章我会着重分享给大家一些使用Canvas开发的实例和这些实例的实现思路。

本文看点:使用canvas来绘制常见的各种图形实例,并且会简单封装一下绘制各图形的方法,最后会分享给大家一个封装好的快速绘制多边形的方法。

开始之前

//获取canvas容器
var can = document.getElementById('canvas');
//创建一个画布
var ctx = can.getContext('2d');

绘制圆形

var draw = function(x, y, r, start, end, color, type) {
 var unit = Math.PI / 180;
 ctx.beginPath();
 ctx.arc(x, y, r, start * unit, end * unit);
 ctx[type + 'Style'] = color;
 ctx.closePath();
 ctx[type]();
}

参数解释:x,y-圆心;start-起始角度;end-结束角度;color-绘制颜色;type-绘制类型('fill'和'stroke')。

实例如下图所示:

canvas快速绘制圆形、三角形、矩形、多边形方法介绍

绘制三角形

var draw = function(x1, y1, x2, y2, x3, y3, color, type) {
 ctx.beginPath();
 ctx.moveTo(x1, y1);
 ctx.lineTo(x2, y2);
 ctx.lineTo(x3, y3);
 ctx[type + 'Style'] = color;
 ctx.closePath();
 ctx[type]();
}

参数解释:x1(2、3),y1(2、3)-三角形的三个点的坐标;color-绘制颜色;type-绘制类型('fill'和'stroke')。

实例如下图所示:

canvas快速绘制圆形、三角形、矩形、多边形方法介绍

绘制(圆角)矩形

var draw = function(x, y, width, height, radius, color, type){
 ctx.beginPath();
 ctx.moveTo(x, y+radius);
 ctx.lineTo(x, y+height-radius);
 ctx.quadraticCurveTo(x, y+height, x+radius, y+height);
 ctx.lineTo(x+width-radius, y+height);
 ctx.quadraticCurveTo(x+width, y+height, x+width, y+height-radius);
 ctx.lineTo(x+width, y+radius);
 ctx.quadraticCurveTo(x+width, y, x+width-radius, y);
 ctx.lineTo(x+radius, y);
 ctx.quadraticCurveTo(x, y, x, y+radius);
 ctx[type + 'Style'] = color || params.color;
 ctx.closePath();
 ctx[type]();
}

参数解释:x,y-左上角点的坐标;width、height-宽高;radius-圆角;color-绘制颜色;type-绘制类型('fill'和'stroke')。

实例如下图所示:

canvas快速绘制圆形、三角形、矩形、多边形方法介绍

绘制多边形

var drawPolygon = function(ctx, conf){
 var x = conf && conf.x || 0; //中心点x坐标
 var y = conf && conf.y || 0; //中心点y坐标
 var num = conf && conf.num || 3; //图形边的个数
 var r = conf && conf.r || 100; //图形的半径
 var width = conf && conf.width || 5;
 var strokeStyle = conf && conf.strokeStyle;
 var fillStyle = conf && conf.fillStyle;
 //开始路径
 ctx.beginPath();
 var startX = x + r * Math.cos(2*Math.PI*0/num);
 var startY = y + r * Math.sin(2*Math.PI*0/num);
 ctx.moveTo(startX, startY);
 for(var i = 1; i <= num; i++) {
 var newX = x + r * Math.cos(2*Math.PI*i/num);
 var newY = y + r * Math.sin(2*Math.PI*i/num);
 ctx.lineTo(newX, newY);
 }
 ctx.closePath();
 //路径闭合
 if(strokeStyle) {
 ctx.strokeStyle = strokeStyle;
 ctx.lineWidth = width;
 ctx.lineJoin = 'round';
 ctx.stroke();
 }
 if(fillStyle) {
 ctx.fillStyle = fillStyle;
 ctx.fill();
 }
}

参数说明:

ctx: canvas画布

conf: 配置项,提供以下一些配置

  • x: 中心点横坐标
  • y: 中心点纵坐标
  • num: 多边形的边数
  • r:多边形的半径长度
  • width:多边形线的宽度
  • strokeStyle:边线的颜色
  • fillStyle:填充的颜色

canvas快速绘制圆形、三角形、矩形、多边形方法介绍

上图效果的代码如下:

上图1的代码:

drawPolygon(ctx, {
 num: 6,
 r: 100,
 strokeStyle: 'blue',
 fillStyle: '#9da'
})

上图2的代码:

drawPolygon(ctx, {
 num: 4,
 r: 150,
 strokeStyle: 'red',
 width: 4
})

上图3的代码:

drawPolygon(ctx, {
 x: 800,
 y: 250,
 num: 10,
 fillStyle: '#000'
})

结语

我们总结一下,使用canvas绘制图形就是那几个函数:beginPath、arc、moveTo、lineTo、closePath、fill、stroke。当我们能够熟练掌握并运用自如的时候,就能够独当一面了。加油吧,骚年们!

本文涉及的代码我已经上传至github,项目代码github地址,喜欢的同学点个Star,多谢多谢~

以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,同时也希望多多支持三水点靠木!

Javascript 相关文章推荐
js点击button按钮跳转到另一个新页面
Oct 10 Javascript
JavaScript返回0-1之间随机数的方法
Apr 06 Javascript
全面解析Bootstrap表单使用方法(表单控件状态)
Nov 24 Javascript
javascript HTML+CSS实现经典橙色导航菜单
Feb 16 Javascript
微信小程序 scroll-view隐藏滚动条详解
Jan 16 Javascript
网页中的图片查看器viewjs使用方法
Jul 11 Javascript
jquery select插件异步实时搜索实例代码
Oct 20 jQuery
Vue+webpack项目基础配置教程
Feb 12 Javascript
vue+webpack 打包文件 404 页面空白的解决方法
Feb 28 Javascript
vue-router的钩子函数用法实例分析
Oct 26 Javascript
Javascript地址引用代码实例解析
Feb 25 Javascript
vue 中的 render 函数作用详解
Feb 28 Javascript
JavaScript获取短信验证码(周期性)
Dec 29 #Javascript
JavaScript实现同一个页面打开多张图片
Dec 29 #Javascript
Javascript 对cookie操作详解及实例
Dec 29 #Javascript
前端 Vue.js 和 MVVM 详细介绍
Dec 29 #Javascript
javascript显示系统当前时间代码
Dec 29 #Javascript
解析JavaScript模仿块级作用域
Dec 29 #Javascript
JavaScript仿支付宝6位数字密码输入框
Dec 29 #Javascript
You might like
在PHP的图形函数中显示汉字
2006/10/09 PHP
php抓即时股票信息
2006/10/09 PHP
通过JavaScript或PHP检测Android设备的代码
2011/03/09 PHP
深入解析fsockopen与pfsockopen的区别
2013/07/05 PHP
Thinkphp关闭缓存的方法
2015/06/26 PHP
PHP会话控制实例分析
2016/12/24 PHP
PHP中的函数声明与使用详解
2017/05/27 PHP
收藏Javascript中常用的55个经典技巧
2007/08/12 Javascript
使用jquery给input和textarea设定ie中的focus
2008/05/29 Javascript
默认让页面的第一个控件选中的javascript代码
2009/12/26 Javascript
JS操作JSON要领详细总结
2013/08/25 Javascript
jQuery操作input值的各种方法总结
2013/11/21 Javascript
Javascript浅谈之this
2013/12/17 Javascript
jQuery中clone()方法用法实例
2015/01/16 Javascript
JQuery控制radio选中和不选中方法总结
2015/04/15 Javascript
jQuery-1.9.1源码分析系列(十一)DOM操作续之克隆节点
2015/12/01 Javascript
Angularjs 自定义服务的三种方式(推荐)
2016/08/02 Javascript
windows下vue-cli导入bootstrap样式
2017/04/25 Javascript
React Native仿美团下拉菜单的实例代码
2017/08/08 Javascript
浅谈vue中改elementUI默认样式引发的static与assets的区别
2018/02/03 Javascript
关于js的三种使用方式(行内js、内部js、外部js)的程序代码
2018/05/05 Javascript
原生JS封装_new函数实现new关键字的功能
2018/08/12 Javascript
vue移动端html5页面根据屏幕适配的四种解决方法
2018/10/19 Javascript
js实现自动播放匀速轮播图
2020/02/06 Javascript
写一个Vue loading 插件
2020/11/09 Javascript
[08:07]DOTA2每周TOP10 精彩击杀集锦vol.8
2014/06/25 DOTA
python读取浮点数和读取文本文件示例
2014/05/06 Python
使用Python编写一个简单的tic-tac-toe游戏的教程
2015/04/16 Python
详解在Python和IPython中使用Docker
2015/04/28 Python
Python文件的读写和异常代码示例
2017/10/31 Python
python操作日志的封装方法(两种方法)
2019/05/23 Python
Python爬虫开发与项目实战
2020/12/16 Python
几个SQL的面试题
2014/03/08 面试题
尽职尽责村干部自我鉴定
2014/01/23 职场文书
事业单位鉴定材料
2014/05/25 职场文书
2016党员干部廉洁自律心得体会
2016/01/13 职场文书