canvas深入浅出(三)| 小册免费学

简介: 所有的内容都是手动绘制还是有点麻烦,好在canvas支持导入图片,createPattern(image, type),该方法接受两个参数。Image 可以是一个 Image 对象的引用,或者另一个 canvas 对象。Type 必须是下面的字符串值之一:repeat,repeat-x,repeat-y 和 no-repeat。

ed40fadc543e63c8e8f7c8cddcd1c78.png

书接上回


图片


所有的内容都是手动绘制还是有点麻烦,好在canvas支持导入图片,createPattern(image, type),该方法接受两个参数。Image 可以是一个 Image 对象的引用,或者另一个 canvas 对象。Type 必须是下面的字符串值之一:repeatrepeat-xrepeat-yno-repeat

这里引一张我掘金的头像来做示例,要注意这里需要等待图片加载完之后再渲染

// 创建新 image 对象,用作图案
var img = new Image();
img.src = 'https://sf6-ttcdn-tos.pstatp.com/img/user-avatar/01434b575492b00010706d94d5b975aa~300x300.image';
img.onload = function() {
  // 创建图案
  var p = ctx.createPattern(img, 'no-repeat');
  ctx.fillStyle = p;
  ctx.fillRect(0, 0, 150, 150);
}
复制代码


1682514951(1).png

文本


图片都可以渲染那文本不也轻轻松松,canvas 提供了两种方法来渲染文本:

  • fillText(text, x, y [, maxWidth])在指定的(x,y)位置填充指定的文本,绘制的最大宽度是可选的.
  • strokeText(text, x, y [, maxWidth])在指定的(x,y)位置绘制文本边框,绘制的最大宽度是可选的.

根据API的语义就可以知道作用,stroke和fill就是我们前面用的描边和填充

文本可以设置字体等样式

  • font = value当前我们用来绘制文本的样式. 这个字符串使用和 CSSfont 属性相同的语法. 默认的字体是 10px sans-serif
  • textAlign = value文本对齐选项. 可选的值包括:start, end, left, right or center. 默认值是 start
  • textBaseline = value基线对齐选项. 可选的值包括:top, hanging, middle, alphabetic, ideographic, bottom。默认值是 `alphabetic。``
  • ``direction = value文本方向。可能的值包括:ltr, rtl, inherit。默认值是 inherit。`

这些跟css的样式是基本一致的


移动和缩放


既然canvas是为了解决动态图片的问题而设计的,那么移动和缩放可以说是动画的基础

移动很简单,使用translate(x, y)来控制移动,x和y分别就是x轴和y轴的偏移量;

旋转使用rotate(angle),接受一个角度参数,沿顺时针方向,旋转点默认是(0,0)点,除非我们使用translate来移动它(比如直接ctx.translate(10, 10)即可);

接下来是缩放,scale(x, y),x和y分别是x轴和y轴方向的所当比例,1为不变,<1是缩小,反之放大;如果出现负数,就是按照所在的轴进行镜像翻转

如果你熟悉css的transform,那这里应该也很简单,他们很相似。


蒙版


关于蒙版内容,放个文档在这里吧,说起来太费劲了,如果你用过PhotoShop,你可能会比较好理解


动画


关于动画可以使用的方法有三种setTimeout、setInterval、requestAnimationFrame,前两个就是你熟悉的那两个定时器,requestAnimationFrame诉浏览器你希望执行一个动画,并在重绘之前,请求浏览器执行一个特定的函数来更新动画。

动画的大体过程如下:

  • 清除上一帧,可以使用的方法很多,最简单的就是清空矩形,长宽为canvas的长宽
  • 保存canvas状态(样式,变形之类的),ctx.save()
  • 绘制图形
  • 恢复canvas状态,ctx.restore()

我们这里来做一个小的示例,矩形下落

ctx.beginPath();
let h = 0
function down() {
  h += 1
  ctx.clearRect(0, 0, canvas.width, canvas.height);
  ctx.fillRect(0, h, 100, 100)
  window.requestAnimationFrame(down)
}
down()
复制代码

效果如下

1682514913(1).png

相关文章
|
11月前
|
移动开发 数据可视化 JavaScript
谈一谈|小白如何使用egret
谈一谈|小白如何使用egret
158 0
|
存储 前端开发 API
canvas深入浅出(四)| 小册免费学
之前三节我们铺垫了canvas的相关知识,这一节我们来“落地”,实现一个五子棋的小游戏
68 0
|
前端开发 API
canvas深入浅出(二)| 小册免费学
上一节最后我们说了一个绘制曲线的API——arc(那个API并不是专门用来绘制圆形,只是使用曲线可以绘制圆形),他还有一个兄弟——arcTo(x1, y1, x2, y2, r),根据当前描点与给定的控制点1连接的直线,和控制点1与控制点2连接的直线,作为使用指定半径的圆的切线,画出两条切线之间的弧线路径
64 0
canvas深入浅出(二)| 小册免费学
|
XML 前端开发 JavaScript
canvas深入浅出(一)| 小册免费学
canvas是为了解决页面只能显示静态图片而出现的一种可以使用JavaScript绘制的HTML标签,它可以接受两个参数width和height(原来有三个,还有一个moz-opaque控制透明度,已经废弃了)
62 0
|
JavaScript 前端开发 Go
前端性能优化(四)| 小册免费学
前面介绍多个前端性能优化的点,现在我们来说一下性能优化的最后一关——页面渲染 浏览器渲染的过程我们之前也稍微提过,这里再说一下解析 HTML 文件,构建 DOM 树,同时浏览器主进程负责下载 CSS 文件
78 0
|
缓存 前端开发 网络协议
前端性能优化(二)| 小册免费学
上一节介绍了网页加载过程中可优化的点,这一节我来说一下网络部分的优化。
64 0
|
存储 Web App开发 缓存
前端性能优化(三)| 小册免费学
上一讲我们说到了HTTP缓存,这一讲的缓存并不单单指HTTP缓存
71 0
|
域名解析 缓存 网络协议
前端性能优化(一)| 小册免费学
移动互联网时代,用户对于网页的打开速度要求越来越高。首屏作为直面用户的第一屏,其重要性不言而喻。优化用户体验更是我们前端开发非常需要 focus 的东西之一。
63 0
|
存储 SQL 算法
第一课(二)|学习笔记
快速学习第一课(二)
94 0
第一课(二)|学习笔记
|
存储 机器学习/深度学习 人工智能
第一课(三)|学习笔记
快速学习第一课(三)
121 0
第一课(三)|学习笔记