HTML 是一种在 Web 上使用的通用标记语言。HTML 允许你格式化文本,添加图片,创建链接、输入表单、框架和表格等等,并可将之存为文本文件,浏览器即可读取和显示。
HTML 2.0——1995年11月,RFC 1866发布
HTML 3.2——1997年1月14日,W3C发布推荐标准
HTML 4.0——1997年12月18日,W3C发布推荐标准
HTML 4.01——1999年12月24日,W3C发布推荐标准
HTML 5——2014年10月28日,W3C发布推荐标准
HTML5 成为 HTML、XHTML 以及 HTML DOM 的新标准。HTML5 规则:基于 HTML、CSS、DOM 以及 JavaScript,扩充用于绘画的 canvas 元素、用于媒介回放的 video 和 audio 元素、对本地离线存储的更好的支持、新的特殊内容元素,比如 article、footer、header、nav、section、新的表单控件,比如 calendar、date、time、email、url、search。减少对外部插件的需求(比如 Flash)。更优秀的错误处理。更多取代脚本的标记。HTML5 应该独立于设备。开发进程应对公众透明。浏览器支持情况:最新版本的 Safari、Chrome、Firefox 以及 Opera 支持 HTML5 特性。Internet Explorer 9以上版本支持 HTML5 特性。
第1章 Canvas
HTML5 元素用于图形的绘制,通过脚本 (通常是JavaScript)来完成。 标签只是图形容器,所以必须使用脚本来绘制图形。
通俗讲就是是一张白纸,而JavaScript脚本代码就是画笔。你可以使用JavaScript在canvas上绘制路径,盒、圆、字符以及添加图像。所以你需要先有一定的JavaScript基础。如果没有这方面基础,那就没有吧,照葫芦画瓢,等接触多了,就会发现依然啥都不明白。我的理念:不明白就不明白,要抱有站在巨人肩膀上写代码觉悟,会用、会举一反三足矣,没指望你能研究的精通,把发明语言的人拍死在沙滩上。凡事留一线,日后好相见,给别人留条活路,给自己的头发留条活路(安慰自己)。
canvas 坐标
canvas 是一个二维网格,canvas 的左上角坐标为 (0,0),canvas 的右下角坐标为 (canvas的宽度,canvas的长度),说白了就是,画布是一个x-y坐标系统,只不过这个坐标系,有点和小学数学中的坐标系有点出入,我用个图来说明一下
从图中可以看到,y轴反过来了。y轴箭头方向为正值。
现在让我们磨刀霍霍开始吧!
canvas 标签使用代码如下:
<canvas id="canvasId1" width="200" height="100">canvas>
ps:
标签通常需要指定一个id属性 (脚本中经常引用), 默认情况下 元素没有边框和内容width 和 height 属性定义的画布的大小,在HTML页面中使用多个 标签
yk_2020
用JavaScript画画
//首先,找到画布,既找到 标签var c=document.getElementById("canvasId1");//接着 创建画笔,创建context对象 getContext("2d") 对象是内建的 HTML5 对象,拥有多种绘制路径、矩形、圆形、字符以及添加图像的方法var ctx=c.getContext("2d");//然后 给画笔沾点颜色ctx.fillStyle="#FF0000";//紧接着 画个长方形 fillRect(x,y,width,height) x,y画布起始点坐标,width 长方形宽度,height长方形高度ctx.fillRect(0,0,150,75);
这样就画好了一个长方形。
整体代码如下:
<html> <head> <title>HTML5title> head> <body> <canvas id="canvasId1" width="200" height="100" style="border:1px solid #c3c3c3;">canvas> <script> //首先,找到画布,既找到 标签 var c=document.getElementById("canvasId1"); //接着 创建画笔,创建context对象 getContext("2d") 对象是内建的 HTML5 对象,拥有多种绘制路径、矩形、圆形、字符以及添加图像的方法 var ctx=c.getContext("2d"); //然后 给画笔沾点颜色 ctx.fillStyle="#FF0000"; //紧接着 画个长方形 fillRect(x,y,width,height) x,y画布起始点坐标,width 长方形宽度,height长方形高度 ctx.fillRect(0,0,150,75);script> body>html>
来看一下效果:
下面是收集了一些常规画笔操作,后面然后我再汇总到一个实例中,可以跟着一起练习一下
方法 | 使用 | 说明 |
moveTo(x,y) lineTo(x,y) closePath(); | ctx.moveTo(0,0);ctx.lineTo(20,10);ctx.lineTo(40,10);ctx.closePath();ctx.stroke(); | 在画布Canvas上画线moveTo(x,y) 定义线条开始坐标lineTo(x,y) 定义线条结束坐标closePath()返回开始点 |
1、arc(x,y,r,start,stop,counterclockwise) 2、arcTo(x1,y1,x2,y2,r); | 1、 ctx.beginPath(); //Math.PI就是圆周率π,PI是弧度制的π,也就是180° ctx.arc(95,50,40,0,2*Math.PI); ctx.stroke(); 2、 ctx.beginPath(); // 创建开始点 ctx.moveTo(20,20); // 创建水平线 ctx.lineTo(100,20); // 创建弧 ctx.arcTo(150,20,150,70,50); // 创建垂直线 ctx.lineTo(150,120); // 进行绘制 ctx.stroke(); | 在画布Canvas上绘制圆形、圆弧 1、arc(x,y,r,start,stop,counterclockwise), x、y为圆心位置, r为圆半径, start为开始角度, stop为结束角度, counterclockwise可选填。逆时针还是顺时针绘图。False = 顺时针,true = 逆时针。 2、arcTo() 方法在画布上创建介于两个切线之间的弧/曲线 arcTo(x1,y1,x2,y2,r); x1 弧的起点的 x 坐标 y1 弧的起点的 y 坐标 x2 弧的终点的 x 坐标 y2 弧的终点的 y 坐标 r 弧的半径 |
1.rect(x,y,width,height) 2.fillRect(x,y,width,height) 3.strokeRect(x,y,width,height) 4.clearRect(x,y,width,height) 5.clip(); | 1、 ctx.rect(20,20,150,100); ctx.stroke(); 2、 ctx.fillRect(0,0,150,100); 3、 ctx.strokeRect(20,20,150,100); 4、 ctx.clearRect(20,20,100,50); | 在画布Canvas上绘制圆形矩形 1.rect(x,y,width,height)绘制矩形 2.fillRect(x,y,width,height)绘制“被填充”的矩形,默认的填充颜色是黑色。 3.strokeRect(x,y,width,height)绘制矩形(无填充)默认颜色是黑色边框。 4.clearRect(x,y,width,height)在给定的矩形内清除指定的像素 5.clip();按照指定尺寸剪辑 |
1、quadraticCurveTo(cpx,cpy,x,y); 2、.bezierCurveTo(cp1x,cp1y,cp2x,cp2y,x,y); | 1、 ctx.beginPath(); ctx.moveTo(20,20); ctx.quadraticCurveTo(20,100,200,20); ctx.stroke(); 2、 ctx.beginPath(); ctx.moveTo(20,20); ctx.bezierCurveTo(20,100,200,100,200,20); ctx.stroke(); | 在画布Canvas上绘制贝塞尔曲线 1,二次贝塞尔.quadraticCurveTo(cpx,cpy,x,y); cpx 贝塞尔控制点的 x 坐标 cpy 贝塞尔控制点的 y 坐标 x 结束点的 x 坐标 y 结束点的 y 坐标 2,三次贝塞尔 ctx.bezierCurveTo(cp1x,cp1y,cp2x,cp2y,x,y); cp1x 第一个贝塞尔控制点的 x 坐标 cp1y 第一个贝塞尔控制点的 y 坐标 cp2x 第二个贝塞尔控制点的 x 坐标 cp2y 第二个贝塞尔控制点的 y 坐标 x 结束点的 x 坐标 y 结束点的 y 坐标 |
1、.fillText(text,x,y,maxWidth); 2、.strokeText(text,x,y,maxWidth); | 1、 //设置字体 ctx.font="20px Georgia"; ctx.fillText("Hello World!",10,50); 2、 ctx.font="20px Georgia"; ctx.strokeText("Hello World!",10,50); | 在画布Canvas上绘制文字 实体字体 fillText(text,x,y,maxWidth); text规定在画布上输出的文本。 x开始绘制文本的 x 坐标位置(相对于画布)。 y开始绘制文本的 y 坐标位置(相对于画布)。 maxWidth可选填。允许的最大文本宽度,以像素计。 空心字体 strokeText(text,x,y,maxWidth); text规定在画布上输出的文本。 x开始绘制文本的 x 坐标位置(相对于画布)。 y开始绘制文本的 y 坐标位置(相对于画布)。 maxWidth可选填。允许的最大文本宽度,以像素计。 |
以上仅为常用方法,这只是开始,更多的方法需要探索,纸上谈兵终觉浅,好了,开始施展才华把!!个人建议先找张纸和笔,打个草稿!
效果:
源码如下:
<html> <head> <title>HTML5title> head> <body> <h1>HTML5 - moveTo(x,y)、lineTo(x,y)、closePath() 实现画三角形h1> <canvas id="canvasId1" width="500" height="300" style="border:1px solid #c3c3c3;">canvas> <h1>HTML5 - arc(x,y,r,start,stop,counterclockwise)、arcTo(x1,y1,x2,y2,r)、fillRect(x1,y1,x2,y2,r); 实现画圆及圆弧h1> <canvas id="canvasId2" width="500" height="300" style="border:1px solid #c3c3c3;">canvas> <h1>HTML5 - quadraticCurveTo(cpx,cpy,x,y)、bezierCurveTo(cp1x,cp1y,cp2x,cp2y,x,y); 实现绘制贝塞尔曲线h1> <canvas id="canvasId3" width="500" height="300" style="border:1px solid #c3c3c3;">canvas> <h1>HTML5 - fillText(text,x,y,maxWidth)、strokeText(text,x,y,maxWidth); 实现绘制文字h1> <canvas id="canvasId4" width="500" height="300" style="border:1px solid #c3c3c3;">canvas> <script> //HTML5 - moveTo(x,y)、lineTo(x,y)、closePath() 实现画三角形 var ctx1=document.getElementById("canvasId1").getContext("2d"); //将起始点移动到(20,20)坐标 ctx1.moveTo(20,20); //划线 从坐标(20,20)到坐标(250,20) ctx1.lineTo(250,20); //划线 从坐标(250,20)到坐标(250,200) ctx1.lineTo(250,200); //划线 回到起始点 ctx1.closePath(); //将划线描边 ctx1.stroke(); //HTML5 - arc(x,y,r,start,stop,counterclockwise)、arcTo(x1,y1,x2,y2,r)、fillRect(x1,y1,x2,y2,r); 实现画圆及圆弧 var ctx2=document.getElementById("canvasId2").getContext("2d"); //画第一个圆 ctx2.beginPath(); ctx2.arc(100,100,100,0,2*Math.PI); //绘画的区域填充红色 ctx2.fillStyle="red"; ctx2.fill(); //画第二个圆 ctx2.beginPath(); //绘画圆 ctx2.arc(300,100,100,0,2*Math.PI); ctx2.strokeStyle="green"; //将划线描边 ctx2.stroke(); //画第一个圆弧 ctx2.beginPath(); // 创建开始点 ctx2.moveTo(0,200); ctx2.lineTo(50,200); // 创建弧 两个点的x轴要一致 ctx2.arcTo(100,200,100,300,50); ctx2.closePath(); // 进行绘制 ctx2.stroke(); //画第二个圆弧 ctx2.beginPath(); ctx2.moveTo(200,200); ctx2.lineTo(250,200); ctx2.arcTo(300,200,300,250,50); ctx2.closePath(); ctx2.fill(); //HTML5 - quadraticCurveTo(cpx,cpy,x,y)、bezierCurveTo(cp1x,cp1y,cp2x,cp2y,x,y); 实现绘制贝塞尔曲线 var ctx3=document.getElementById("canvasId3").getContext("2d"); //划线 从坐标(20,20)到坐标(250,20) ctx3.beginPath(); ctx3.moveTo(50,50); ctx3.quadraticCurveTo(50,200,250,100); ctx3.stroke(); ctx3.beginPath(); ctx3.moveTo(60,60); ctx3.bezierCurveTo(60,300,250,300,260,110); // 创建渐变 var gradient=ctx3.createLinearGradient(0,0,500,0); gradient.addColorStop("0","magenta"); gradient.addColorStop("0.5","blue"); gradient.addColorStop("1.0","red"); // 用渐变填色 ctx3.strokeStyle=gradient; ctx3.stroke(); //HTML5 - HTML5 - fillText(text,x,y,maxWidth)、strokeText(text,x,y,maxWidth); 实现绘制文字 var ctx4=document.getElementById("canvasId4").getContext("2d"); ctx4.font="20px Georgia"; ctx4.fillText("Hello 荧光之炽!",50,50); // 创建渐变 var gradient=ctx4.createLinearGradient(0,0,500,0); gradient.addColorStop("0","magenta"); gradient.addColorStop("0.5","blue"); gradient.addColorStop("1.0","red"); // 用渐变填色 ctx4.strokeStyle=gradient; ctx4.strokeText("Hello 荧光之炽!",50,190);script> body>html>
打赏一下呗