很多人都不知道canvas到底是做什么用的,在项目中如何使用,下来给大家介绍一下canvas能做什么。 canvas是HTML5中的新元素,你可以使用dujavascript用它来绘制图形、图zhi标、以及其它任何视觉性图像。它也可用于创dao建图片特效和动画。如果你掌握了完整的命令,你可以用canvas创建丰富的web应用程序。如果你想很好的使用canvas,你首先应该很好的掌握javascript。
首先我们来创建一个画板出来,画板上有什么就需要你自己去加进去了
<canvas id='myCanvas' width="800" height="600">不支持canvas元素,更新浏览器</canvas>上面代码我是我是创建了一个画板,指定了画板的宽度和高度,因为canvas 是HTML5新增的标签,所以canvas 是不支持低版本的浏览器的,(比如IE8以下的都不支持),我们在标签里面提示浏览器不支持。
// 使用 id 来寻找 canvas 元素 var canvas = document.getElementById('myCanvas') //创建 context 对象 var context =canvas.getContext('2d') //给所绘制的图形添充颜色 context.fillStyle='#ff0000', //规定形状、位置、尺寸,第一个参数是Y左边,第二个是X坐标,第三个是宽,第四个是高 context.fillRect(10,30,100,120)getContext(“2d”) 对象是内建的 HTML5 对象,拥有多种绘制路径、矩形、圆形、字符以及添加图像的方法。 画一个圆形
// 使用 id 来寻找 canvas 元素 var canvas = document.getElementById('myCanvas') //创建 context 对象 var context =canvas.getContext('2d') //beginPath()定义一个新的路径绘制动作的开始 context.beginPath() //创建弧/曲线(用于创建圆形或部分圆)四个参数arc(x,y,r,start,stop) context.arc(95,50,40,0,2*Math.PI); //绘制线路(相当于那笔把上面的各个点连接起来) context.stroke()上面代码就是在画布上画一个简单的圆形图案。
//画直线 var canvas = document.getElementById('myCanvas') var context =canvas.getContext('2d') context.beginPath() //起始点moveTo(x,y) context.moveTo(100,150), //目标点lineTo(x,y) context.lineTo(200,150), context.stroke()下面来画二次贝塞尔曲线,首先来简单了解一下什么是贝塞尔曲线
贝塞尔曲线 是应用于二维图形应用程序的数学曲线。 曲线定义:起始点、终止点(也称锚点)、控制点。通过调整控制点,贝塞尔曲线的形状会发生变化。 原理:由 P0 至 P1 的连续点 Q0,描述一条线段。 由 P1 至 P2 的连续点 Q1,描述一条线段。 由 Q0 至 Q1 的连续点 B(t),描述一条二次贝塞尔曲线。
var canvas = document.getElementById('myCanvas') var context =canvas.getContext('2d') context.beginPath() context.moveTo(100,150), //创建二次贝塞尔曲线。 //四个参数,第一个贝塞尔控制点的 x 坐标;第二个贝塞尔控制点的 y 坐标;第三个结束点的 x 坐标;第四个结束点的 y 坐标。 context.quadraticCurveTo(240,50,300,150), context.stroke()Canvas - 渐变 渐变分为两种线性渐变和径向渐变 线性渐变
var canvas = document.getElementById('myCanvas') var context =canvas.getContext('2d') // 创建渐变 var clg=context.createLinearGradient(0,0,200,0); clg.addColorStop(0,"rgb(125, 67, 233)"); clg.addColorStop(0.5,"rgb(215, 230, 9)"); clg.addColorStop(1,"white"); // 填充线性渐变 context.fillStyle=clg; //设置或返回用于笔触的颜色、渐变或模式 canvas.strokeStyle=clg; context.fillRect(10,10,150,80); context.stroke()径向渐变
var canvas = document.getElementById('myCanvas') var context =canvas.getContext('2d') // 创建径向渐变 var clg=context.createRadialGradient(200,200,150,200,200,40); clg.addColorStop(0,"rgb(125, 67, 233)"); clg.addColorStop(0.5,"rgb(215, 230, 9)"); clg.addColorStop(1,"white"); // 填充渐变 context.fillStyle=clg; context.fillRect(10,10,400,400);下面是使用canvas做的一个时钟
var canvas = document.getElementById("myCanvas"); var ctx = canvas.getContext("2d"); function clock() { ctx.save() ctx.translate(300,300) ctx.lineCap = 'round' ctx.strokeStyle = 'rgb(166, 167, 162)' ctx.lineWidth = 8 ctx.scale(0.5,0.5) // 画外面的圆 ctx.save(); ctx.beginPath(); ctx.strokeStyle = '#000000'; ctx.arc(0,0,150,0,2*Math.PI); ctx.stroke(); ctx.restore(); // 画里面的刻度 ctx.save() ctx.beginPath(); for (var i=0; i < 12; i++) { ctx.moveTo(0,-125); ctx.lineTo(0,-140); ctx.stroke() ctx.rotate(30*Math.PI/180) } ctx.restore() // 分针刻度 ctx.save() ctx.lineWidth = 3 for (var i = 0; i < 60; i++) { if (i % 5 != 0){ ctx.beginPath() ctx.moveTo(0,-135); ctx.lineTo(0,-140); ctx.stroke() } ctx.rotate(6*Math.PI/180) } ctx.restore() // 当前时间 var date = new Date() var s = date.getSeconds() var min = date.getMinutes() + s/60 var h = date.getHours() + min/60 // 时针 ctx.save() ctx.rotate(30*h*Math.PI/180) ctx.lineWidth = 14 ctx.beginPath() ctx.moveTo(0,-80) ctx.lineTo(0,20) ctx.stroke() ctx.restore() // 分针 ctx.save() ctx.lineWidth = 10 ctx.rotate(6*min*Math.PI/180) ctx.beginPath() ctx.rotate(-30*Math.PI/180) ctx.moveTo(0,-120) ctx.lineTo(0,30) ctx.stroke() ctx.restore() //秒针 ctx.save() ctx.lineWidth = 6 ctx.strokeStyle = 'rgb(166, 167, 162)' ctx.fillStyle = 'rgb(166, 167, 162)' ctx.rotate(6*s*Math.PI/180) ctx.beginPath() ctx.arc(0,0,10,0,2*Math.PI) ctx.fill() ctx.beginPath() ctx.moveTo(0,-125) ctx.lineTo(0,30) ctx.stroke() ctx.beginPath() ctx.arc(0,-135,10,0,2*Math.PI) ctx.stroke() ctx.restore() ctx.restore() } setInterval(function () { ctx.clearRect(0,0,canvas.width,canvas.height) move() },1000)静态图片是这个样子