Canvas 基本绘制(上)
HTML5学堂:之前的文章与大家分享了SVG的一系列操作,但是SVG也是存在一些劣势,所以今天开始为大家分享介绍HTML5 Canvas的相关知识,Canvas是什么呢?又如何进行Canvas进行图像的绘制呢?在Canvas当中有哪些绘制图形的方法?来看看下面的文章吧。
Canvas与SVG的比较
Canvas的基本知识 - 什么是Canvas
canvas标记由Apple在Safari 1.3 Web 浏览器中引入
canvas是HTML5新增的一个标签,它的主要作用是画矢量图;
canvas的API接口提供给了JavaScript;
Canvas的基本知识 - 使用Canvas能够做什么
canvas能做动画,但不是为动画而生,能做游戏,能做特别炫的效果,主要是为画图而生。
canvas元素本身并没有绘制能力(它仅仅是图形的容器) - 您必须使用脚本来完成实际的绘图任务。
Canvas的基本知识 - getContext对象
getContext()方法可返回一个对象,该对象提供了用于在画布上绘图的方法和属性。参数为2d,目前只有2d的合法
注意:canvas有默认宽高,如果使用css设置Canvas画布的大小,则导致画布按比例缩放到你设置的值,所以canvas画布宽高的设置需要在标签中,使用属性的设置方法进行设置。
Canvas设置大小测试实例
<!doctype html>
<html>
<head>
<meta charset="UTF-8">
<title>HTML5学堂</title>
<link rel="stylesheet" href="../css/reset.css">
<script src="../js/jquery-1.8.3.min.js" charset="utf-8" type="text/javascript"></script>
<style>
.can-one {
border: 1px solid #999;
}
.can-two {
width: 200px;
height: 100px;
border: 1px solid #999;
}
</style>
</head>
<body>
<canvas id="testCanvasOne" width="400" height="200" class="can-one"></canvas>
<canvas id="testCanvasTwo" width="400" height="200" class="can-two"></canvas>
<canvas id="testCanvasThree" width="200" height="100" class="can-one"></canvas>
<script>
var testCanvasOne = $("#testCanvasOne")[0];
var contextOne = testCanvasOne.getContext("2d");
contextOne.beginPath();
contextOne.rect(180, 80, 40, 40);
contextOne.stroke();
contextOne.closePath();
var testCanvasTwo = $("#testCanvasTwo")[0];
var contextTwo = testCanvasTwo.getContext("2d");
contextTwo.beginPath();
contextTwo.rect(180, 80, 40, 40);
contextTwo.stroke();
contextTwo.closePath();
var testCanvasThree = $("#testCanvasThree")[0];
var contextThree = testCanvasThree.getContext("2d");
contextThree.beginPath();
contextThree.rect(180, 80, 40, 40);
contextThree.stroke();
contextThree.closePath();
</script>
</body>
</html>
代码效果图:
路径
路径通常指存在于多种计算机图形设计软件中的以贝塞尔曲线为理论基础的区域绘制方式。绘制时产生的线条称为路径。 路径由一个或多个直线段或曲线段组成。 线段的起始点和结束点由锚点标记,就像用于固定线的针。 通过编辑路径的锚点,您可以改变路径的形状。 您可以通过拖动方向线末尾类似锚点的方向点来控制曲线。路径可以是开放的,也可以是闭合的。 对于开放路径,路径的起始锚点称为端点。
Canvas基本方法
开始与闭合路径
beginPath( )、closePath( )
移动画笔与画线
moveTo(x, y)、lineTo(x, y)
描绘路径与填充路径
stroke( )、fill( )
文本绘制方法
strokeText(text, x, y, maxWidth):绘制文字轮廓
fillText(text, x, y, maxWidth):填充文字text即是要写入的文字,x、y为文字起始位置的坐标,maxWidth为文字的宽度,能够防止文字太宽而溢出,浏览器会缩减文字以适应宽度
Canvas基本方法操作实例
<!doctype html>
<html>
<head>
<meta charset="UTF-8">
<title>HTML5学堂</title>
<link rel="stylesheet" href="../css/reset.css">
<style>
.draw {
border: 1px solid red;
}
</style>
</head>
<body>
<canvas id="testCanvas" width="300" height="150" class="draw"></canvas>
<script>
var testCanvas = document.getElementById("testCanvas");
// 获取getContext()对象
var context = testCanvas.getContext("2d");
// 开始路径
context.beginPath();
// 移动画笔
context.moveTo(20, 20);
// 画线
context.lineTo(280, 20);
context.lineTo(280, 130);
context.lineTo(20, 130);
context.lineTo(20, 20);
// 绘制路径
context.stroke();
// 填充路径
// context.fill();
// 关闭路径
context.closePath();
</script>
</body>
</html>
代码效果图:
学完了,来点作业吧~
利用该文章讲解的canvas知识点来完成下图。
- 浅谈强化学习的方法及学习路线
- 【亲测有效】Win10家庭版Microsoft Edge页面出现乱码的两种解决方案及gpedit.msc命令无法使用的解决策略
- Fiddler抓包7-post请求(json)
- Selenium2+python自动化56-unittest之断言(assert)
- 长文 | 手把手教你如何使用python进行数据分析(最好将文章代码自己码一遍)
- 回归与梯度下降法及实现原理
- 【宅男宅女们的福音】电影天堂最新电影爬取及搜索脚本
- 把模块有关联的放在一个文件夹中 在python2中调用文件夹名会直接失败 在python3中调用会成功,但是调用不能成功的解决方案
- numpy用法小结
- 凯撒密码加解密及破解实现原理
- linux bash Shell脚本经典 Fork炸弹演示及命令详解
- python易错盲点排查之+=与+的区别分析以及一些赋值运算踩过的坑
- Selenium2+python自动化57-捕获异常(NoSuchElementException)
- 你真的会用ABAP, Java和JavaScript里的constructor么?
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- 谈谈 INotifyPropertyChanged 的实现
- C 语言小知识
- 使用代码配置 NHibernate
- [Introduction]Go特殊的引用类型:值传递/指针传递/引用传递
- PythonforResearch | 0_语法基础
- iOS 系统中的视图动画
- 在 Android 的 /data 目录下添加虚拟内存
- 玩转安卓模拟器命令行
- 如何利用NLog输出结构化日志,并在Kibana优雅分析日志?
- Android 应用保存状态
- 2020-8-9日报:修复zip在某些X64机器上的运行崩溃问题
- 专题一:预处理数据(使用sklearn-preprocessing)
- 「Docker」使用 Docker run 覆盖 ENTRYPOINT
- 尝试在 Mono 3.0 下运行 ASP.NET MVC 4
- CentOS7使用yum安装nginx报错:获取 GPG 密钥失败:[Errno 14] curl#60 - "Peer's Certificate has expired."