html5(二)canvas绘图渐变
什么是 Canvas?
HTML5 的 canvas 元素使用 JavaScript 在网页上绘制图像。
画布是一个矩形区域,您可以控制其每一像素。
canvas 拥有多种绘制路径、矩形、圆形、字符以及添加图像的方法
canvas id="myCanvas" width="200" height="100"> /canvas>
canvas 元素本身是没有绘图能力的。所有的绘制工作必须在 JavaScript 内部完成:
script tyPE="text/javascript"> VAR c=document.getElementById("myCanvas"); var cxt=c.getContext("2d"); cxt.fillStyle="#FF0000"; cxt.fillRect(0,0,150,75); /script>
getContext("2d") 对象是内建的 HTML5 对象,拥有多种绘制路径、矩形、圆形、字符以及添加图像的方法。
=========================
canvas height="300" id="draw" width="300"> 在这里的代码是看不见的,不支持canvas的浏览器中可以看到这里的代码,这是作兼容的方法/canvas> ----------canvas设置宽高必须在元素内部。
canvas 默认大小是300*150,如果是在style中设置宽高,会相对于默认大小的倍数进行放大;
var oc=document.getElementById('draw'); var ctx=oc.getContext('2d'); //获取绘制的上下问,2d表示2d图形,webgl表示3D; ctx.fillStyle='red'; //设置填充颜色 ctx.strokeStyle='red'; //空心边框的颜色 ctx.arc(100,100,100,0,360*Math.PI/180); //绘制弧形或圆形 //ctx.fill(); //填充渲染, ctx.stroke(); // 空心渲染 ctx.closePath(); // 闭合路径 ctx.fillStyle='green'; ctx.beginPath(); //开始路径 ctx.arc(100,100,100,-90*Math.PI/180,-30*Math.PI/180); ctx.fill();
=================绘制矩形==========边框问题
ctx.fillRect(0,0,100,100); --------填充
ctx.strokeRect(100,100,100,100); --------边框默认颜色是黑色,线宽1px;当边框的像素是奇数时,会出现像素被分配的现象,边缘颜色变浅,一般解决方法:吧像素设置成偶数,或者改成小数,ctx.strokeRect(100.5,100.5,100,100);
ctx.lineWidth=10; ----------设置线宽
=============绘图路径======
ctx.beginPath(); //开始路径 ctx.moveTo(10,10); //第一次设置的起点 ctx.lineto(500,500); //下一个点 ctx.lineTo(300,100); ctx.stroke();
ctx.closePath(); -----------有两个作用:一是关闭刚才开始的路径,二是闭合路径。
beginPath(),closePath()不对属性线宽,颜色等起作用;
ctx.save(); -----------保存上次的属性状态;
ctx.reStore(); ------------取出上次的属性状态;
ctx.clearRect(0,0,100,100); ----------清除指定矩形区域的大小;
ctx.clearRect(0,0,oc.width,oc.height); ---------------清除整个画布的大小;
=========简易画笔=======待完善-========
var oc = document.getElementById('draw'); var ctx = oc.getContext('2d'); oc.onmousedown = function(ev) { ctx.fillStyle = 'red'; var x = ev.pageX - oc.offsetLeft; //ev.pageX是鼠标到body页面的距离,oc.offsetLeft是画布距离body的距离; var y = ev.pageY - oc.offsetTop; ctx.moveTo(x, y); oc.onmouSEMove = function(ev) { var x = ev.pageX - oc.offsetLeft; var y = ev.pageY - oc.offsetTop; ctx.lineTo(x, y); ctx.stroke(); } ; oc.onmouseup = function() { oc.onmousemove = null; oc.onmouseup = null; } return false } ;
===========连接处样式和线头样式=======
ctx.lineWidth=20; ctx.lineJoin='bevel'; //连接处样式,bevel是斜切,round是圆角 ctx.lineCap='round'; //设置线头样式的时候不能用closePath(),round圆角,square方块 ctx.strokeRect(10,10,200,200);
============绘制曲线和圆形========
ctx.arc(100,100,100,-90*Math.PI/180,-30*Math.PI/180,false); //如绘制的不是360度,绘制出来的是扇形的一部分,如果用的是fill()会自动吧起点和终点连接,false代表是顺时针,true代表是逆时针;如果想要绘制出来的是标准的扇形,要加上起始点moveTo( 圆心);
ctx.fill();
曲线的绘制==========
ctx.moveTo(100,100); ctx.arcTo(10,20,150,100,50); //参数两个点加一个半径 ctx.quadraticCurveTo(100,100,200,100); //前一个是控制点坐标,后一个是结束点的坐标 ctx.bezierCurveTo(10,20,30,40,50,60); //三个点一次是第一个控制点,第二个控制点,终点
=================变换=================
ctx.translate(100,100); //位移,往上和往左偏移是负数; ctx.rotate(45*Math.PI/180); //旋转45度,默认以图形自身左上角为定点 ctx.scale(0.5,0.5)//缩放 ctx.fillRect(10,10,100,200);
============设置图片和背景===================
var img=new Image(); img.src=''; img.onload=function(){ //img加载完成的时候执行绘图 ctx.drawImage(img,50,60); //3个参数,50是距离cavas左边的距离,60是距离canvas上面的距离 ctx.drawImage(img,50,60,10,20); //5个参数,50,60 同上,10和20 是图片绘制到canvas中显示的大小 ctx.drawImage(img,,,,,50,60,10,20); //9个参数,逗号的四个参数是图片本身的坐标和宽高,后面四个参数同上面的最后四个参数var bg=ctx.createPattern(img,'repeat'); //repeat--平铺,no-repeat不平铺,repeat-x是x轴平铺
ctx.fillStyle=bg; //用背景填充
ctx.fillRect(100,100,300,300);
==========canvas中的渐变===============
线性渐变--------
var lg=ctx.createLineargradient(100,200,300,400); //线性渐变,100和200是起点坐标,300和400是终点坐标 lg.addColorStop(0,'blue'); //0和0.5和1是代表颜色的位置 lg.addColorStop(0.5,'green'); lg.addColorStop(1,'yellow'); ctx.fillStyle=lg; ctx.fillRect(10,10,100,100);
放射性渐变-----------
var rg=ctx.createRadialGradient(100,200,50,300,400 ,100); //放射性渐变100和200是第一个圆形,50是半径,300和400是第二个圆形,100是半径; lg.addColorStop(0,'blue'); //0和0.5和1是代表颜色的位置 lg.addColorStop(0.5,'green'); lg.addColorStop(1,'yellow'); ctx.fillStyle=lg; ctx.fillRect(10,10,100,100);
阴影-------------
ctx.shadowOffsetX=10; //x轴方向偏移 ctx.shadowOffsetY=10; //y轴方向偏移 ctx.shadowColor='red'; //阴影颜色 ctx.shadowBlur=5; //模糊值 ctx.fillRect(0,0,10,100);
=============
什么是 Canvas?
HTML5 的 canvas 元素使用 JavaScript 在网页上绘制图像。
画布是一个矩形区域,您可以控制其每一像素。
canvas 拥有多种绘制路径、矩形、圆形、字符以及添加图像的方法
canvas id="myCanvas" width="200" height="100"> /canvas>
canvas 元素本身是没有绘图能力的。所有的绘制工作必须在 JavaScript 内部完成:
script type="text/javascript"> var c=document.getElementById("myCanvas"); var cxt=c.getContext("2d"); cxt.fillStyle="#FF0000"; cxt.fillRect(0,0,150,75); /script>
getContext("2d") 对象是内建的 HTML5 对象,拥有多种绘制路径、矩形、圆形、字符以及添加图像的方法。
=========================
canvas height="300" id="draw" width="300"> 在这里的代码是看不见的,不支持canvas的浏览器中可以看到这里的代码,这是作兼容的方法/canvas> ----------canvas设置宽高必须在元素内部。
canvas 默认大小是300*150,如果是在style中设置宽高,会相对于默认大小的倍数进行放大;
var oc=document.getElementById('draw'); var ctx=oc.getContext('2d'); //获取绘制的上下问,2d表示2d图形,webgl表示3D; ctx.fillStyle='red'; //设置填充颜色 ctx.strokeStyle='red'; //空心边框的颜色 ctx.arc(100,100,100,0,360*Math.PI/180); //绘制弧形或圆形 //ctx.fill(); //填充渲染, ctx.stroke(); // 空心渲染 ctx.closePath(); // 闭合路径 ctx.fillStyle='green'; ctx.beginPath(); //开始路径 ctx.arc(100,100,100,-90*Math.PI/180,-30*Math.PI/180); ctx.fill();
=================绘制矩形==========边框问题
ctx.fillRect(0,0,100,100); --------填充
ctx.strokeRect(100,100,100,100); --------边框默认颜色是黑色,线宽1px;当边框的像素是奇数时,会出现像素被分配的现象,边缘颜色变浅,一般解决方法:吧像素设置成偶数,或者改成小数,ctx.strokeRect(100.5,100.5,100,100);
ctx.lineWidth=10; ----------设置线宽
=============绘图路径======
ctx.beginPath(); //开始路径 ctx.moveTo(10,10); //第一次设置的起点 ctx.lineTo(500,500); //下一个点 ctx.lineTo(300,100); ctx.stroke();
ctx.closePath(); -----------有两个作用:一是关闭刚才开始的路径,二是闭合路径。
beginPath(),closePath()不对属性线宽,颜色等起作用;
ctx.save(); -----------保存上次的属性状态;
ctx.restore(); ------------取出上次的属性状态;
ctx.clearRect(0,0,100,100); ----------清除指定矩形区域的大小;
ctx.clearRect(0,0,oc.width,oc.height); ---------------清除整个画布的大小;
=========简易画笔=======待完善-========
var oc = document.getElementById('draw'); var ctx = oc.getContext('2d'); oc.onmousedown = function(ev) { ctx.fillStyle = 'red'; var x = ev.pageX - oc.offsetLeft; //ev.pageX是鼠标到body页面的距离,oc.offsetLeft是画布距离body的距离; var y = ev.pageY - oc.offsetTop; ctx.moveTo(x, y); oc.onmousemove = function(ev) { var x = ev.pageX - oc.offsetLeft; var y = ev.pageY - oc.offsetTop; ctx.lineTo(x, y); ctx.stroke(); } ; oc.onmouseup = function() { oc.onmousemove = null; oc.onmouseup = null; } return false } ;
===========连接处样式和线头样式=======
ctx.lineWidth=20; ctx.lineJoin='bevel'; //连接处样式,bevel是斜切,round是圆角 ctx.lineCap='round'; //设置线头样式的时候不能用closePath(),round圆角,square方块 ctx.strokeRect(10,10,200,200);
============绘制曲线和圆形========
ctx.arc(100,100,100,-90*Math.PI/180,-30*Math.PI/180,false); //如绘制的不是360度,绘制出来的是扇形的一部分,如果用的是fill()会自动吧起点和终点连接,false代表是顺时针,true代表是逆时针;如果想要绘制出来的是标准的扇形,要加上起始点moveTo( 圆心);
ctx.fill();
曲线的绘制==========
ctx.moveTo(100,100); ctx.arcTo(10,20,150,100,50); //参数两个点加一个半径 ctx.quadraticCurveTo(100,100,200,100); //前一个是控制点坐标,后一个是结束点的坐标 ctx.bezierCurveTo(10,20,30,40,50,60); //三个点一次是第一个控制点,第二个控制点,终点
=================变换=================
ctx.translate(100,100); //位移,往上和往左偏移是负数; ctx.rotate(45*Math.PI/180); //旋转45度,默认以图形自身左上角为定点 ctx.scale(0.5,0.5)//缩放 ctx.fillRect(10,10,100,200);
============设置图片和背景===================
var img=new Image(); img.src=''; img.onload=function(){ //img加载完成的时候执行绘图 ctx.drawImage(img,50,60); //3个参数,50是距离cavas左边的距离,60是距离canvas上面的距离 ctx.drawImage(img,50,60,10,20); //5个参数,50,60 同上,10和20 是图片绘制到canvas中显示的大小 ctx.drawImage(img,,,,,50,60,10,20); //9个参数,逗号的四个参数是图片本身的坐标和宽高,后面四个参数同上面的最后四个参数var bg=ctx.createPattern(img,'repeat'); //repeat--平铺,no-repeat不平铺,repeat-x是x轴平铺
ctx.fillStyle=bg; //用背景填充
ctx.fillRect(100,100,300,300);
==========canvas中的渐变===============
线性渐变--------
var lg=ctx.createLinearGradient(100,200,300,400); //线性渐变,100和200是起点坐标,300和400是终点坐标 lg.addColorStop(0,'blue'); //0和0.5和1是代表颜色的位置 lg.addColorStop(0.5,'green'); lg.addColorStop(1,'yellow'); ctx.fillStyle=lg; ctx.fillRect(10,10,100,100);
放射性渐变-----------
var rg=ctx.createRadialGradient(100,200,50,300,400 ,100); //放射性渐变100和200是第一个圆形,50是半径,300和400是第二个圆形,100是半径; lg.addColorStop(0,'blue'); //0和0.5和1是代表颜色的位置 lg.addColorStop(0.5,'green'); lg.addColorStop(1,'yellow'); ctx.fillStyle=lg; ctx.fillRect(10,10,100,100);
阴影-------------
ctx.shadowOffsetX=10; //x轴方向偏移 ctx.shadowOffsetY=10; //y轴方向偏移 ctx.shadowColor='red'; //阴影颜色 ctx.shadowBlur=5; //模糊值 ctx.fillRect(0,0,10,100);
=============
觉得可用,就经常来吧! 欢迎评论哦! html5教程,巧夺天工,精雕玉琢。小宝典献丑了!
声明:本文内容由网友自发贡献,本站不承担相应法律责任。对本内容有异议或投诉,请联系2913721942#qq.com核实处理,我们将尽快回复您,谢谢合作!
若转载请注明出处: html5(二)canvas绘图渐变
本文地址: https://pptw.com/jishu/587231.html