canvas学习总结

canvas学习总结

canvas的兼容
  • 对于不兼容canvas的浏览器,即使使用html5shiv.js插件也没有用,不支持就是不支持
  • 在css样式中设置的canvas的大小实际上是对于原本默认300*150大小的画布及其内容进行缩放。
  • 想要调整画布大小但是不缩放绘制的内容,就应该在html代码中直接设置宽高。
获取canvas宽高的两种方法
  • $(DOM元素).width
    $(DOM元素).height
  • ctx.canvas.width
    ctx.canvas.height
    在这里插入图片描述
API----绘制线条

什么是‘非0环绕’?
canvas绘图中交叉路径的填充问题,依据非零环绕原则,由顺、逆时针穿插次数决定是否填充某一区域

非零环绕原理
判断有自我交叉情况的路径时,对于路径中的任意给定区域,从该区域内部任意找一个点作为起点,画一条足够长的线段,使此线段的终点完全落在路径范围之外。然后,初始化计数器为0,每当这条线段与路径上的直线或曲线相交时,就改变计数器的值。如果是与路径的顺时针部分相交,则加1,如果是与路径的逆时针部分相交,则减1。若计数器的最终值不是0,那么此区域就在路径里面,在调用fill方法时,浏览器就会对其进行填充。如果最终值时0,那么此区域就不在路径内部,浏览器就不会对其进行填充

在这里插入图片描述

  • var ctx = canvas元素.getContext(“2d”);
    获取画布的上下文对象,暂时没有3d,想要绘制3d图形(用于游戏)需要使用 web gl 网页技术
    上下文对象中有许多用于绘图的属性和方法:(长度相关的数值都不带单位)
  • moveTo(xPosition,yPosition) 将画笔移动到起点
  • lineTo() 绘制轨迹到该点
  • stroke() 轨迹描边
  • strokeStyle 用于设置字符串类型的轨迹描边的颜色
  • fill() 对于“非0环绕”的闭合空间进行填充
  • fillStyle 用于设置字符串类型的填充颜色
    再次绘图时,对于没有开启独立路径就直接进行再次绘图,每次再次使用描边或填充都会再次使用到之前绘制的图形上,其颜色会被后设置的颜色覆盖
  • beginPath() 开始新的路径(开启独立路径)
  • closePath() 自动将起点与终点进行闭合
  • 关于线条的问题
    • 1.默认的宽度是多少 1px 但实际看起来比1px宽
    • 2.默认的颜色是什么 黑色 但实际看起来比黑色浅
  • 产生原因: 对齐的点是线的中心位置 会把线分成两个0.5px,但是由于浏览器默认最小显示宽度为1px,所以canvas显示的是会不饱和增加宽度
  • 解决方案: 将线条沿垂直于线条的方向向上或向下移动0.5px
  • lineWidth 用于设置线条的宽度
  • lineCap 用于设置线条两端的形状,butt 默认的平头,square 方头,round 圆头
  • lineJoin 用于设置线条拐点的形状,miter 默认的尖拐点,bevel 像是被切了一刀的平拐点,round 圆拐点
  • setLineDash([5,10,15]) stroke之前设置这个属性,可以绘制虚线,数组中的参数分别于实线、空格的循环顺序进行对应,设置其长度
  • getLineDash() 返回所绘制的虚线图形的用于重复部分的图像,对应的长度数组。如果 setLineDash([5,10,15]) 则返回数组 [5,10,15,5,10,15]
  • lineDashOffset 用于设置虚线的偏移量,如果是正的值则往后(绘制的起点方向)偏移,如果是负的值则往前(绘制的终点方向)偏移
API----矩形绘制
  • rect(x,y,w,h) 绘制没有独立路径的矩形轨迹(不自动描边或填充)
  • strokeRect(x,y,w,h) 有独立路径,不影响别的绘制,自动描边
  • fillRect(x,y,w,h) 有独立路径,不影响别的绘制,自动填充
  • clearRect(x,y,w,h) 绘制一个矩形区域,用于擦除这个区域内的所有图案
API----渐变颜色
  • var LG=ctx.createLinearGradient(x0,y0,x1,y1) 创建一个线性渐变对象,渐变的范围和方向为从点(x0,y0)到点(x1,y1)
  • LG.addColorStop(0~1的数值,颜色字符串) 用于添加指定位置的颜色
    • 可以将LG渐变对象赋值给fillStyle属性或strokeStyle属性,用于绘制渐变线条和渐变图形
  • createLinearGradient(x0,y0,r0,x1,y1,r1) 创建一个放射性的线性渐变对象,点(x0,y0)为圆心r0为半径的地方开始渐变,到点(x1,y1)为圆心r1为半径的地方结束渐变
  • createRadialGradient(x0,y0,r0,x1,y1,r1) 创建一个径向渐变对象
    在这里插入图片描述
API----绘制圆弧
  • ctx.arc(x,y,r,startAngle,stopAngle,false)—最后一个参数,false表示顺时针绘制(默认参数),true表示逆时针绘制
  • 如果想要绘制扇形,首先需要将画笔移动到圆心
ctx.moveTo(x,y);
ctx.arc(x,y,r,startAngle,stopAngle,false);
ctx.closePath();
ctx.stroke();
ctx.fill();
API----绘制文本
  • ctx.font=“20px Arial”; 与css的font属性的设置一样,主要设置字号和字体
  • ctx.textAlign — 设置文字基于绘制点的对齐方式,取值有left center right start(默认) end
  • ctx.textBaseline — 设置文字的垂直对齐方式,取值有top middle bottom
  • ctx.measureText().width — 获取文字的宽度(基于文本的字体大小),因此 ctx.font 的设置要在此语句之前
API----绘制图片
  • drawImage() ,它的第一个参数可以是图片对象,canvas对象以及video对象
  • drawImage(img,x,y) — x,y 表示在画布中的作图起点,绘制完整的图片
  • drawImage(img,x,y,w,h) — w,h 表示绘制的完整图片的大小(图片缩放,而不是图片截取)
  • drawImage(img,x0,y0,w0,h0,x,y,w,h) — x0,y0,w0,h0 表示在图片中截取的区域,x,y,w,h 表示画布中绘制图片的区域(对截取到的图片按照绘制区域大小进行缩放)
  • 在绘制图片(或canvas/video)之前,必要先加载好图片(或canvas/video)资源
var img=new Image(); 或 var img=document.createElement("img");
img.onload=function(){
     其他代码
     drawImage()
     其他代码
}
img.src=src; // 必须要先绑定图片加载完成的事件,再设置图片的src属性
API----变换坐标轴及左上角的原点

变换坐标轴及原点 — 只对在该变换之后绘制的图形有效

  • translate(x,y) — 表示将坐标系移动到坐标原点为 x,y 的位置
  • scale(x,y) — 表示对坐标轴横纵的缩放比例
  • rotate(angle) — 表示将坐标系顺时针旋转angle角度
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值