第 18 章 动画与 Canvas 图形

本文介绍了HTML5中动画与Canvas图形的相关技术,包括requestAnimationFrame的使用,如何节流动画,以及Canvas的基本绘图操作如绘制矩形和路径。requestAnimationFrame提供了更精确的动画控制,确保了平滑的视觉效果。同时,文章还讲解了如何在Canvas上设置绘图上下文和绘制图形的方法。
摘要由CSDN通过智能技术生成

是 HTML5 最受欢迎的新特性。自身提供了一些 API,但并非所有浏览器都支持这些 API,其中包括支持基础绘图能力的 2D 上下文和被称为 WebGL 的 3D 上下文。

这个 updateAnimations()方法会周期性运行注册的动画任务,并 反映出每个任务的变化(例如,同时更新滚动新闻和进度条)。如果没有动画需要更新,则这个方法既 可以什么也不做,直接退出,也可以停止动画循环,等待其他需要更新的动画。

实现平滑动画最佳的重绘间隔为 1000 毫秒/60,大约 17 毫秒。以这个速度重绘可以实现最平 滑的动画,因为这已经是浏览器的极限了。

时间间隔的问题

随着的流行和 HTML5 游戏的兴起,开发者发现 setInterval()和 setTimeout()的不精确是个大问题。

requestAnimationFrame

Firefox 4 率先在浏览器中为 JavaScript 动画增加了一个名为 mozRequestAnimationFrame()方法的 API。这个方法会告诉浏览器要执行动画 了,于是浏览器可以通过最优方式确定重绘的时序。自从出现之后,这个 API 被广泛采用,现在作为 requestAnimationFrame()方法已经得到各大浏览器的支持。

requestAnimationFrame()方法接收一个参数,此参数是一个要在重绘屏幕前调用的函数。这个 18.1 使用 requestAnimationFrame 551 15 16 17 18 19 28 20 21 23 24 25 27 26 22 函数就是修改 DOM 样式以反映下一次重绘有什么变化的地方。

通过 requestAnimationFrame 节流

通过 requestAnimationFrame()递归地向队列 中加入回调函数,可以保证每次重绘最多只调用一次回调函数。这是一个非常好的节流工具。

基本的画布功能
    1. 创建元素时至少要设置其 width 和 height 属性。与其他元素一样,width 和 height 属性也可以在 DOM 节点上设置,因此可以随时修改。整个元 素还可以通过 CSS 添加样式,并且元素在添加样式或实际绘制内容前是不可见的。
    1. 要在画布上绘制图形,首先要取得绘图上下文。使用 getContext()方法可以获取对绘图上下文的 引用。对于平面图形,需要给这个方法传入参数"2d",表示要获取 2D 上下文对象:
    let drawing = document.getElementById("drawing"); 
    // 确保浏览器支持<canvas> 
    if (drawing.getContext) { 
     let context = drawing.getContext("2d"); 
     // 其他代码
    } 
    
  • 3.可以使用 toDataURL()方法导出元素上的图像。这个方法接收一个参数:要生成图像 的 MIME 类型(与用来创建图形的上下文无关)。例如,要从画布上导出一张 PNG 格式的图片,可以这 样做:

let drawing = document.getElementById("drawing"); // 确保浏览器支持 if (drawing.getContext) { // 取得图像的数据 URI let imgURI = drawing.toDataURL("image/png"); // 显示图片 let image = document.createElement("img"); image.src = imgURI; document.body.appendChild(image); }

绘制矩形

fillRect()方法用于以指定颜色在画布上绘制并填充矩形。接收 4 个参数:矩形 x 坐标、矩形 y 坐标、 矩形宽度和矩形高度。这几个参数的单位都是像素

绘制路径

须首先调用 beginPath()方法以表示要开始绘制新路径。然后,再调用下列方法来绘制路径。

moveTo(x, y):不绘制线条,只把绘制光标移动到(x, y)。

// 创建路径

context.beginPath();

// 绘制内圆 context.moveTo(194, 100);

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值