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 相关文章推荐
javascript获取ckeditor编辑器的值(实现代码)
Nov 18 Javascript
javascipt匹配单行和多行注释的正则表达式
Nov 20 Javascript
Jquery uploadify图片上传插件无法上传的解决方法
Dec 16 Javascript
JS实现统计复选框选中个数并提示确定与取消的方法
Jul 01 Javascript
一个php+js实时显示时间问题
Oct 12 Javascript
BootStrap初学者对弹出框和进度条的使用感觉
Jun 27 Javascript
BootStrap中Datepicker控件带中文的js文件
Aug 10 Javascript
angular2倒计时组件使用详解
Jan 12 Javascript
jQuery选择器_动力节点Java学院整理
Jul 05 jQuery
Vue使用vux-ui自定义表单验证遇到的问题及解决方法
May 10 Javascript
vue 检测用户上传图片宽高的方法
Feb 06 Javascript
js 图片懒加载的实现
Oct 21 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/11/25 PHP
PHP接口继承及接口多继承原理与实现方法详解
2017/10/18 PHP
js验证输入是否为手机号码或电话号码示例
2013/12/30 Javascript
node.js中的console.trace方法使用说明
2014/12/09 Javascript
使用angular写一个hello world
2015/01/23 Javascript
JS实现向表格中动态添加行的方法
2015/03/30 Javascript
jquery ztree实现树的搜索功能
2016/02/25 Javascript
AngularJS 视图详解及示例代码
2016/08/17 Javascript
微信小程序实战之运维小项目
2017/01/17 Javascript
Vue.js学习之计算属性
2017/01/22 Javascript
JS中把函数作为另一函数的参数传递方法(总结)
2017/06/28 Javascript
React Native实现进度条弹框的示例代码
2017/07/17 Javascript
nodejs对express中next函数的一些理解
2017/09/08 NodeJs
vue2.0 如何把子组件的数据传给父组件(推荐)
2018/01/15 Javascript
基于$.ajax()方法从服务器获取json数据的几种方式总结
2018/01/31 Javascript
使用proxy实现一个更优雅的vue【推荐】
2018/06/19 Javascript
使用JS代码实现俄罗斯方块游戏
2018/08/03 Javascript
mpvue开发音频类小程序踩坑和建议详解
2019/03/12 Javascript
使用js和canvas实现时钟效果
2020/09/08 Javascript
JavaScript 中的六种循环方法
2021/01/06 Javascript
[02:43]DOTA2英雄基础教程 半人马战行者
2014/01/13 DOTA
详解Python中break语句的用法
2015/05/14 Python
使用Python实现BT种子和磁力链接的相互转换
2015/11/09 Python
Fiddler如何抓取手机APP数据包
2016/01/22 Python
Python3 socket同步通信简单示例
2017/06/07 Python
Python基于递归实现电话号码映射功能示例
2018/04/13 Python
pycharm创建一个python包方法图解
2019/04/10 Python
解决pycharm 工具栏Tool中找不到Run manager.py Task的问题
2019/07/01 Python
python基于plotly实现画饼状图代码实例
2019/12/16 Python
python 爬取免费简历模板网站的示例
2020/09/27 Python
viagogo英国票务平台:演唱会、体育比赛、戏剧门票
2017/03/24 全球购物
大队干部竞选演讲稿
2014/04/28 职场文书
大学毕业晚会开场白
2015/05/29 职场文书
如何把新闻人物写得立体、鲜活?
2019/08/14 职场文书
html实现弹窗的实例
2021/06/09 HTML / CSS
python数据处理之Pandas类型转换
2022/04/28 Python