canvas的基础入门

canvas是定义在浏览器上的画布。它不仅仅是一个标签元素更是一个编程工具是一套编程的接口。利用它可以开发出很多东西,比如动画,游戏,动态的图表等富有变现力和感染力的应用。还可以开发出绚丽的3D动态效果。接下来我们一起学习!

一、 创建canvas

 1 <!DOCTYPE html>
 2 <html lang="en">
 3
 4 <head>
 5     <meta charset="UTF-8">
 6     <meta name="viewport" content="width=device-width, initial-scale=1.0">
 7     <meta http-equiv="X-UA-Compatible" content="ie=edge">
 8     <title>canvas基础</title>
 9 </head>
10
11 <body>
12     <canvas id=‘canvas‘ width=‘700‘ height=‘400‘ style="border: 1px solid #aaa;display:block;margin:50px auto "></canvas>
13 </body>
14
15 </html>

看一下现在的效果:

除了上述代码那样指定canvas的宽高,还可以在js中这样指定:

1 var canvas = document.getElementById(‘canvas‘);
2
3  canvas.width = 700;
4  canvas.height = 400;

这样边框内就是一个画布了,接下来我们就可以在这画布里进行绘制了。

二 、 画一条线段

 1 <script>
 2     window.onload = function () {
 3         var canvas = document.getElementById(‘canvas‘); //获取canvas
 4
 5         canvas.width = 700;                 //设定canvas的宽度
 6         canvas.height = 400;                //设定canvas的高度
 7
 8         if (canvas.getContext(‘2d‘)) {
 9
10             var context = canvas.getContext(‘2d‘);  //获取绘图的上下文环境
11
12             context.moveTo(100, 100)        //画笔的起始位置
13             context.lineTo(500, 300)        //画笔的结束位置
14             context.lineWidth = 5;          //线的宽度
15             context.strokeStyle = ‘#005588‘ //线的颜色
16             context.stroke()                //开始绘制
17
18         } else {
19             alert(‘您的浏览器不支持canvas,请更换浏览器尝试~‘)
20         }
21     }
22 </script>

看一下效果图:

三 、 画一个三角形并着色

 1 <script>
 2     window.onload = function () {
 3         var canvas = document.getElementById(‘canvas‘); //获取canvas
 4
 5         canvas.width = 700;                 //设定canvas的宽度
 6         canvas.height = 400;                //设定canvas的高度
 7
 8         if (canvas.getContext(‘2d‘)) {
 9
10             var context = canvas.getContext(‘2d‘);  //获取绘图的上下文环境
11
12             context.moveTo(100, 100)        //画笔的起始位置
13             context.lineTo(500, 300)        //画笔的结束位置
14             context.lineTo(100, 300)        //画笔的结束位置
15             context.lineTo(100, 100)        //画笔的结束位置
16
17             context.fillStyle=‘rgb(2,100,30)‘   //设置填充颜色
18             context.fill()                      //开始进行着色
19
20             context.lineWidth = 5;          //线的宽度
21             context.strokeStyle = ‘red‘ //线的颜色
22             context.stroke()                //开始绘制
23
24         } else {
25             alert(‘您的浏览器不支持canvas,请更换浏览器尝试~‘)
26         }
27     }
28 </script>

效果图:

四 、 绘制两个图形

 1 <script>
 2     window.onload = function () {
 3         var canvas = document.getElementById(‘canvas‘); //获取canvas
 4
 5         canvas.width = 700;                 //设定canvas的宽度
 6         canvas.height = 400;                //设定canvas的高度
 7
 8         if (canvas.getContext(‘2d‘)) {
 9
10             var context = canvas.getContext(‘2d‘);  //获取绘图的上下文环境
11
12             context.beginPath()            //开始一个新的路径绘制
13
14             context.moveTo(100, 100)        //画笔的起始位置
15             context.lineTo(500, 300)        //画笔的结束位置
16             context.lineTo(100, 300)        //画笔的结束位置
17             context.lineTo(100, 100)        //画笔的结束位置
18
19             context.closePath()             //结束一个路径的绘制
20
21             context.fillStyle=‘rgb(2,100,30)‘   //设置填充颜色
22             context.fill()                      //开始进行着色
23
24             context.lineWidth = 5;          //线的宽度
25             context.strokeStyle = ‘red‘     //线的颜色
26             context.stroke()                //开始绘制
27
28             context.beginPath()            //开始一个新的路径绘制
29
30             context.moveTo(100,50)          //画笔的起始位置
31             context.lineTo(600,300)         //画笔的结束位置
32
33             context.closePath()             //结束一个路径的绘制
34
35             context.lineWidth = 3;          //线的宽度
36             context.strokeStyle = ‘yellow‘    //线的颜色
37             context.stroke()                //开始绘制
38
39
40         } else {
41             alert(‘您的浏览器不支持canvas,请更换浏览器尝试~‘)
42         }
43     }
44 </script>

效果图:

五 、 绘制一个七巧板

 1 <script>
 2     var tangram = [
 3         { p: [{ x: 0, y: 0 }, { x: 800, y: 0 }, { x: 400, y: 400 }], color: ‘#caff67‘ },
 4         { p: [{ x: 0, y: 0 }, { x: 400, y: 400 }, { x: 0, y: 800 }], color: ‘#67becf‘ },
 5         { p: [{ x: 800, y: 0 }, { x: 800, y: 400 }, { x: 600, y: 600 }, { x: 600, y: 200 }], color: ‘#ef3d61‘ },
 6         { p: [{ x: 600, y: 200 }, { x: 600, y: 600 }, { x: 400, y: 400 }], color: ‘#f9f51a‘ },
 7         { p: [{ x: 400, y: 400 }, { x: 600, y: 600 }, { x: 400, y: 800 }, { x: 200, y: 600 }], color: ‘#a594c0‘ },
 8         { p: [{ x: 200, y: 600 }, { x: 400, y: 800 }, { x: 0, y: 800 }], color: ‘#fa8ecc‘ },
 9         { p: [{ x: 800, y: 400 }, { x: 800, y: 800 }, { x: 400, y: 800 }], color: ‘#f6ca29‘ },
10     ]
11     window.onload = function () {
12         var canvas = document.getElementById(‘canvas‘); //获取canvas
13
14         canvas.width = 800;                 //设定canvas的宽度
15         canvas.height = 800;                //设定canvas的高度
16
17         if (canvas.getContext(‘2d‘)) {
18
19             var context = canvas.getContext(‘2d‘);  //获取绘图的上下文环境
20
21             for (var i = 0; i < tangram.length; i++) {
22                 draw(tangram[i], context)
23             }
24
25
26         } else {
27             alert(‘您的浏览器不支持canvas,请更换浏览器尝试~‘)
28         }
29     }
30
31     function draw(piece, context) {
32         context.beginPath();
33         context.moveTo(piece.p[0].x, piece.p[0].y);
34         for (var i = 1; i < piece.p.length; i++) {
35             context.lineTo(piece.p[i].x, piece.p[i].y)
36         }
37         context.closePath();
38
39         context.fillStyle = piece.color;
40         context.fill();
41
42         context.strokeStyle = ‘black‘;
43         context.lineWidth = 3;
44         context.stroke();
45
46     }
47 </script>

效果图:

六 、 绘制一段弧

 1 <script>
 2     window.onload = function () {
 3         var canvas = document.getElementById(‘canvas‘); //获取canvas
 4
 5         canvas.width = 600;                 //设定canvas的宽度
 6         canvas.height = 600;                //设定canvas的高度
 7
 8         if (canvas.getContext(‘2d‘)) {
 9
10             var context = canvas.getContext(‘2d‘);  //获取绘图的上下文环境
11
12             context.lineWidth = 5;
13             context.strokeStyle = ‘#005588‘;
14             context.arc(300, 300, 200, 0, 1.5 * Math.PI);
15             context.stroke();
16
17         } else {
18             alert(‘您的浏览器不支持canvas,请更换浏览器尝试~‘)
19         }
20     }
21 </script>

context.arc各参数的含义:

1    context.arc(
2                 centerx ,           //圆心的x轴坐标位置
3                 centery,            //圆心的y轴坐标位置
4                 radius,             //圆弧半径的值
5                 startingAngle,      //以哪个弧度制开始
6                 endingAngle,        //在哪个弧度制结束
7                 anticlockwise=false //顺时针方向绘制,为true则逆时针。默认为顺时针。
8             )

效果图:

改为逆时针的话,在context.arc里面添加参数true

context.arc(300, 300, 200, 0, 1.5 * Math.PI,true);

效果图:

七 、 绘制多段弧 和 着色

 1 <script>
 2     window.onload = function () {
 3         var canvas = document.getElementById(‘canvas‘); //获取canvas
 4
 5         canvas.width = 1000;                 //设定canvas的宽度
 6         canvas.height = 600;                //设定canvas的高度
 7
 8         if (canvas.getContext(‘2d‘)) {
 9
10             var context = canvas.getContext(‘2d‘);  //获取绘图的上下文环境
11
12             context.lineWidth = 5;
13             context.strokeStyle = ‘#005588‘;
14
15             for (var i = 0; i < 10; i++) {
16                 context.beginPath();
17                 context.arc(50 + i * 100, 100, 40, 0, 2 * Math.PI * (i + 1) / 10);
18                 context.closePath();
19                 context.stroke();
20             }
21
22             for (var i = 0; i < 10; i++) {
23                 context.beginPath();
24                 context.arc(50 + i * 100, 300, 40, 0, 2 * Math.PI * (i + 1) / 10);
25                     
26                 context.stroke();
27             }
28
29             context.fillStyle = ‘#005588‘
30             for (var i = 0; i < 10; i++) {
31                 context.beginPath()
32                 context.arc(50 + i * 100, 500, 40, 0, 2 * Math.PI * (i + 1) / 10);
33                 context.closePath()
34
35                 context.fill()
36             }
37
38         } else {
39             alert(‘您的浏览器不支持canvas,请更换浏览器尝试~‘)
40         }
41     }
42 </script>

效果图:

可以看出绘制多个弧也是使用beginPath()closePath()。但是绘制出来的弧自动的把首尾连接起来了,成了一个封闭的弧。这是因为closePath()的原因,如果想只是展示不封闭的弧,只需要把context.closePath()这段代码去掉就行。beginPath()closePath()并不一定成对出现。填充的时候,有closePath()和没有closePath()效果是一样的。

原文地址:https://www.cnblogs.com/littleSpill/p/11022600.html

时间: 2024-10-09 09:17:27

canvas的基础入门的相关文章

Android基础入门教程——8.3.16 Canvas API详解(Part 1)

Android基础入门教程--8.3.16 Canvas API详解(Part 1) 标签(空格分隔): Android基础入门教程 本节引言: 前面我们花了13小节详细地讲解了Android中Paint类大部分常用的API,本节开始我们来讲解 Canvas(画板)的一些常用API,我们在Android基础入门教程--8.3.1 三个绘图工具类详解 中已经列出了我们可供调用的一些方法,我们分下类: drawXxx方法族:以一定的坐标值在当前画图区域画图,另外图层会叠加, 即后面绘画的图层会覆盖前

Android基础入门教程——8.3.18 Canvas API详解(Part 3)Matrix和drawBitmapMash

Android基础入门教程--8.3.18 Canvas API详解(Part 3)Matrix和drawBitmapMash 标签(空格分隔): Android基础入门教程 本节引言: 在Canvas的API文档中,我们看到这样一个方法:drawBitmap(Bitmap bitmap, Matrix matrix, Paint paint) 这个Matrix可是有大文章的,前面我们在学Paint的API中的ColorFilter中曾讲过ColorMatrix 颜色矩阵,一个4 * 5 的矩阵

html5 Canvas绘制图形入门详解

html5,这个应该就不需要多作介绍了,只要是开发人员应该都不会陌生.html5是「新兴」的网页技术标准,目前,除IE8及其以下版本的IE浏览器之外,几乎所有主流浏览器(FireFox.Chrome.Opera.Safari.IE9+)都已经开始支持html5了.除此之外,在移动浏览器市场上,众多的移动浏览器也纷纷展开关于「html5的支持能力以及性能表现」的军备竞赛.html作为革命性的网页技术标准,再加上众多浏览器厂商或组织的鼎力支持,可以想见,html5将会成为未来网页技术的领头羊. ht

从零基础入门JavaScript(1)

从零基础入门JavaScript(1) 1.1  Javascript的简史 1995年的时候   由网景公司开发的,当时的名字叫livescript    为了推广自己的livescript,搭了java顺风车,改名为javascript 与此同时,     微软因此在自身的浏览器里,也推出了自己的脚本语言 jscript 1997年时候,  由ECMA(欧洲计算机制造商协会)出面,推出了一套javascript的规范,Ecmascript ,规范提出js由三部分组成 JS的组成: ECMAS

2015年最新Android基础入门教程目录(完结版)

2015年最新Android基础入门教程目录(完结版) 标签(空格分隔): Android基础入门教程 前言: 关于<2015年最新Android基础入门教程目录>终于在今天落下了帷幕,全套教程 共148节已编写完毕,附上目录,关于教程的由来,笔者的情况和自学心得,资源分享 以及一些疑问等可戳:<2015最新Android基础入门教程>完结散花~ 下面是本系列教程的完整目录: 第一章:环境搭建与开发相关(已完结 10/10) Android基础入门教程--1.1 背景相关与系统架构

Android基础入门教程——8.3.4 Paint API之—— Xfermode与PorterDuff详解(一)

Android基础入门教程--8.3.4 Paint API之-- Xfermode与PorterDuff详解(一) 标签(空格分隔): Android基础入门教程 本节引言: 不知道标题这两个玩意你熟不熟悉啦,如果自己实现过圆角或者圆形图片,相信对这两个名词 并不模式,一时半伙没想起来?没关系,下面这个图你可曾见过? PS:网上都说在:\samples\android-XX\legacy\ApiDemos\src\com\example\android\apis\graphics 下能找到这个

Android基础入门教程——8.3.2 绘图类实战示例

Android基础入门教程--8.3.2 绘图类实战示例 标签(空格分隔): Android基础入门教程 本节引言: 前两节我们学了Bitmap和一些基本的绘图API的属性以及常用的方法,但心里总觉得有点 不踏实,总得写点什么加深下映像是吧,嗯,本节我们就来写两个简单的例子: 1.简单画图板的实现 2.帮美女擦衣服的简单实现 嘿嘿,第二个例子是小猪刚学安卓写的一个小Demo~嘿嘿~ 开始本节内容~ 1.实战示例1:简单画图板的实现: 这个相信大家都不陌生,很多手机都会自带一个给用户涂鸦的画图板,

Android基础入门教程——8.1.1 Android中的13种Drawable小结 Part 1

Android基础入门教程--8.1.1 Android中的13种Drawable小结 Part 1 标签(空格分隔): Android基础入门教程 本节引言: 从本节开始我们来学习Android中绘图与动画中的一些基础知识,为我们进阶部分的自定义 打下基础!而第一节我们来扣下Android中的Drawable!Android中给我们提供了多达13种的 Drawable,本节我们就来一个个撸一遍! Drawable资源使用注意事项 Drawable分为两种: 一种是我们普通的图片资源,在Andr

osgEarth基础入门(转载)

osgEarth基础入门 osgEarth是基于三维引擎osg开发的三维数字地球引擎库,在osg基础上实现了瓦片调度插件,可选的四叉树调度插件,更多的地理数据加载插件(包括GDAL,ogr,WMS,TMS,VPB,filesystem等),再结合一套地理投影转换插件,这样就能够实现高效处理加载调度地理数据在三维地球上的显示,实现三维虚拟地球. 想要实现一个简单的基于osgEarth的三维地球,有两种方式,这两种方式是互通的.一种基于XML标签的earth文件加载,另外一种是采用C++代码,本质是