HTML5 Canvas 画布,想学IT的必看

本文详细介绍了HTML5Canvas库中的渐变、文字渲染、路径操作,包括线性渐变、径向渐变、文本属性、阴影设置以及TCP协议基础知识,如三次握手和缓存策略。同时提及了如何使用Canvas绘制复杂图形和处理图像,以及浏览器缓存和安全机制。
摘要由CSDN通过智能技术生成

var cvs = ele.getContext(‘2d’);

var grad = cvs.createLinearGradient(0,0,320,0); // 渐变方向,前两个是第一个点,后两个是第二个点坐标

grad.addColorStop(0,“#ff0000”);

grad.addColorStop(0.5,“#ffff00”);

grad.addColorStop(1,“#ffffff”);

cvs.fillStyle = grad;

cvs.fillRect(0,0,320,320);

}

渐变 - 径向渐变 (射线渐变)

案例代码

绘制文字


在画布上写文字非常简单,只需要定义一些属性和方法即可。

属性:

font :与 css 和 font 的属性类似,接受值也完全相同。

textAlign :文本对齐方式,值可以是 left、right 和 center。

textBaseline:文本基线,值可以是 top(顶部对齐)、hanging(基线对齐)、middle(中部对其)、alphabetic(默认对其方式) 和 bottom(底部对齐)。

方法:

strokeText(text,x,y):在位置(x,y)处绘制指定的文字轮廓。

fillText(text,x,y ):与上一个方法相似,区别是该方法绘制的是实心的文字。

measureText():返回指定文字大小信息。

案例代码

绘制阴影


阴影也是 canvas API 的重要组成部分。

每一条路径和文字都可以创建阴影效果。

API 提供了4个实现阴影的属性:

shadowColor:阴影的颜色。

shadowOffsetX:确定阴影的水平投射距离。

shadowOffsetY:确定阴影的垂直投射距离。

shadowBlur:模糊效果。

注: rgba(0,0,0,0.5) // 最后的0.5表示半透明,透明度为0.5。shadowBlur 为羽化程度即模糊度,值越高,羽化程度越高。

案例代码

Canvas 绘制路径


针对一些复杂图形的绘制,需要通过路径进行描绘。

路径是画笔移动的地图,路径建立后,将其发送给上下文,就可以绘制图形。

Canvas 绘制路径 - 常用方法

beginPath()

  • 开始一个新的形状描。穿件路径前必须先调用该方法。

closePath()

- 关闭路径,用直线将最后一个点与远点相连,如果想要保留开放路径,则不需要调用该方法。

stroke()

- 将路径绘制为轮廓形状。

fill()

- 将路径绘制为实心形状,使用该方法是可以不用 closePath 关闭路径。该方法会通过直线连接最后一个点与第一个点实现封闭。

clip()

  • 在上下文中设置剪裁区域。

moveTo( x, y )

-  将笔触移动到指定位置。

lineTo( x, y )

- 绘制一条直线,连接当前笔触位置到指定位置。

rect( x, y, width, height )

  • 生成一个矩形路径。

arc( x, y, radius, startAngle, endAngle, direction )

- 在指定位置上生成弧线或圆线,半径和弧度由属性指定。

  • direction 是布尔类型,表示顺时针或逆时针。

案例:

画一个 V 字形线条

案例:

绘制矩形

绘制矩形简单灵活案例

Canvas 绘制路径  -  弧形


注意: arc(100,100,50,0,1.5*Math.PI)  前三个参数为:中心点坐标和半径,0代表开始的角度,PI为圆周率,一个圆圈为 2 * π , 1.5 * Math.PI 表示 3/4个圆弧。亲,注意了哈,本来不打算解释的,但是我知道你会忘记,我太了解你了,你看,学了又怎么样,不还是得来找答案吗!哈哈哈哈,没关系,加油咯!

Canvas 线性路径


画布默认使用的线性使用的相同的线型。

实际上线条的宽度、端点都可以根据实际绘图需要进行调整。

修改线型属性:

lineWidth :指定线条的粗细,默认值是 1.0 。

案例:

lineCap :指定线条端点的形状,支持的值有以下三个:

butt (默认):向线条的每个末端添加平直的边缘。

round:向线条的每个末端添加圆形线帽。

square:向线条的每个末端添加正方形线帽。

案例:

lineJoin :指定两条线之间的连接点形状。

round:创建圆角。

bevel:创建斜角。

miter(默认):创建尖角。

案例:

miterLimit

  • 与 lineJoin 一起使用。

  • 当 lineJoin 设置为 miter 时,可用于确定线条交接点的延伸范围。

案例

练习:绘制柱状统计图

处理 Canvas 中的图像


HTML5 中,不仅可以使用 Canvas 绘制图形,还可以读取文件,然后使用 Canvas 将图像绘制在画布上。

绘制图像的方法:


drawImage(image,x,y)    // 第一个是图片文件,x,y为左上角坐标

drawImage(image,x,y,w,h)

平铺图像

自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。

深知大多数前端工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

因此收集整理了一份《2024年Web前端开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
img
img
img
img
img
img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上前端开发知识点,真正体系化!

由于文件比较大,这里只是将部分目录大纲截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且后续会持续更新

如果你觉得这些内容对你有帮助,可以添加V获取:vip1024c (备注前端)
img

TCP协议

  • TCP 和 UDP 的区别?
  • TCP 三次握手的过程?
  • 为什么是三次而不是两次、四次?
  • 三次握手过程中可以携带数据么?
  • 说说 TCP 四次挥手的过程
  • 为什么是四次挥手而不是三次?
  • 半连接队列和 SYN Flood 攻击的关系
  • 如何应对 SYN Flood 攻击?
  • 介绍一下 TCP 报文头部的字段
  • TCP 快速打开的原理(TFO)
  • 说说TCP报文中时间戳的作用?
  • TCP 的超时重传时间是如何计算的?
  • TCP 的流量控制
  • TCP 的拥塞控制
  • 说说 Nagle 算法和延迟确认?
  • 如何理解 TCP 的 keep-alive?

CodeChina开源项目:【大厂前端面试题解析+核心总结学习笔记+真实项目实战+最新讲解视频】

浏览器篇
  • 浏览器缓存?
  • 说一说浏览器的本地存储?各自优劣如何?
  • 说一说从输入URL到页面呈现发生了什么?
  • 谈谈你对重绘和回流的理解
  • XSS攻击
  • CSRF攻击
  • HTTPS为什么让数据传输更安全?
  • 实现事件的防抖和节流?
  • 实现图片懒加载?

了一份《2024年Web前端开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。**
[外链图片转存中…(img-uy7XSogx-1711905824921)]
[外链图片转存中…(img-FEXk6DQA-1711905824922)]
[外链图片转存中…(img-KjRirDgX-1711905824922)]
[外链图片转存中…(img-krcfI0Vv-1711905824923)]
[外链图片转存中…(img-ZvRZiJTD-1711905824923)]
[外链图片转存中…(img-N3BBZ7Fp-1711905824924)]

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上前端开发知识点,真正体系化!

由于文件比较大,这里只是将部分目录大纲截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且后续会持续更新

如果你觉得这些内容对你有帮助,可以添加V获取:vip1024c (备注前端)
[外链图片转存中…(img-zsRytpvc-1711905824924)]

TCP协议

  • TCP 和 UDP 的区别?
  • TCP 三次握手的过程?
  • 为什么是三次而不是两次、四次?
  • 三次握手过程中可以携带数据么?
  • 说说 TCP 四次挥手的过程
  • 为什么是四次挥手而不是三次?
  • 半连接队列和 SYN Flood 攻击的关系
  • 如何应对 SYN Flood 攻击?
  • 介绍一下 TCP 报文头部的字段
  • TCP 快速打开的原理(TFO)
  • 说说TCP报文中时间戳的作用?
  • TCP 的超时重传时间是如何计算的?
  • TCP 的流量控制
  • TCP 的拥塞控制
  • 说说 Nagle 算法和延迟确认?
  • 如何理解 TCP 的 keep-alive?

[外链图片转存中…(img-aKg6NUip-1711905824924)]

CodeChina开源项目:【大厂前端面试题解析+核心总结学习笔记+真实项目实战+最新讲解视频】

浏览器篇
  • 浏览器缓存?
  • 说一说浏览器的本地存储?各自优劣如何?
  • 说一说从输入URL到页面呈现发生了什么?
  • 谈谈你对重绘和回流的理解
  • XSS攻击
  • CSRF攻击
  • HTTPS为什么让数据传输更安全?
  • 实现事件的防抖和节流?
  • 实现图片懒加载?

  • 3
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值