Canvas 基本绘制(下)
HTML5学堂:在前一篇文章《Canvas 基本绘制(上)》当中,我们为大家介绍了Canvas的基本知识——什么是Canvas、如何使用Canvas进行图像的绘制、Canvas的一些基本方法。在今天的这篇文章当中,我们将为大家介绍Canvas的基本属性、快速路径的绘制方法等。
Canvas基本属性
设置填充与描边颜色
strokeStyle、fillStyle
线条样式的设置
lineCap:设置线条末端线帽的样式 (round、square)
注释:"round" 和 "square" 会使线条略微变长,两端变长的长度各为宽度的一半。
lineWidth:不需要写单位,以像素计
字体设置
font:同 CSS font-family 属性
textAlign:文字水平对齐方式。可取属性值: start, end, left,right, center。默认值:start。
textBaseline:文字竖直对齐方式。可取属性值: top, hanging(文本基线是悬挂基线), middle,alphabetic(文本基线是普通的字母基线), ideographic(文本基线是表意基线), bottom 。默认值:alphabetic。
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>
.wrap {
width: 600px;
height: 300px;
margin: 0 auto;
}
.wrap canvas {
border: 1px solid #999;
}
</style>
</head>
<body>
<div class="wrap">
<canvas width="600" height="300">
您的浏览器不支持canvas!
</canvas>
</div>
<script>
var testCanvas = $("canvas")[0];
var context = testCanvas.getContext("2d");
context.beginPath();
// 线条宽度
context.lineWidth = "3";
// 填充样式
context.strokeStyle = "red";
context.moveTo(50, 50);
context.lineTo(50, 250);
context.lineTo(150, 250);
context.lineTo(150, 50);
context.lineTo(50, 50);
context.closePath();
// 闭合在实现绘制 该图像左上角出现不重合线性
context.stroke();
// 中间那条线
context.beginPath();
context.strokeStyle = "green";
context.moveTo(50, 150);
context.lineTo(150, 150);
context.stroke();
context.closePath();
// 右边的矩形
context.beginPath();
context.strokeStyle = "blue";
context.fillStyle = "skyblue";
context.moveTo(300, 50);
context.lineTo(300, 250);
context.lineTo(550, 250);
context.lineTo(550, 50);
context.lineTo(300, 50);
context.fill();
context.closePath();
var txt = "HTML5学堂";
context.textAlign = "start";
context. textBaseline = "middle";
context.font = "30px Microsoft YaHei";
context.fillText(txt, 224, 100);
context.strokeText(txt, 224, 200);
context.beginPath();
// 线条宽度
context.lineWidth = "10";
// 设置线条末端线帽的样式
context.lineCap = "round";
// 作参考线
context.moveTo(224, 50);
context.lineTo(224, 250);
context.moveTo(160, 100);
context.lineTo(290, 100);
context.stroke();
</script>
</body>
</html>
Canvas快速绘制
矩形路径的绘制
rect(x,y,w,h):x、y为起始坐标,w、h为矩形的宽、高
fillRect(x,y,w,h):参数同上,与上面区别:上面只绘制、不填充,fillRect(x,y,w,h)填充
圆形路径的绘制
arc(x,y,r,sa,ea,true/false):x、y为圆心坐标,r为半径,sa、ea分别为起始角度和结束角度(以弧度计),最后一个参数为true时,逆时针画圆,false则顺时针画圆;
贝塞尔曲线
quadraticCurveTo (kx,ky,ex,ey)
二次贝塞尔曲线开始点:moveTo(x, y);
kx、ky:控制点
ex、ey:结束点
bezierCurveTo (kx1,ky1,kx2,ky2,ex,ey) :三次贝塞尔曲线,两个控制点,一个终点
开始点:moveTo(x, y);
kx1、ky1:控制点
kx2、ky2:控制点
ex、ey:结束点
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>
.draw {
border: 1px solid red;
}
</style>
</head>
<body>
<canvas id="testCanvas" width="1000" height="500" class="draw"></canvas>
<script>
var testCanvas = document.getElementById("testCanvas");
// 获取getContext()对象
var context = testCanvas.getContext("2d");
// 开始路径
context.beginPath();
// 设置填充样式
context.fillStyle = "yellow";
// 设置描边样式
context.strokeStyle = "green";
// 线条宽度
context.lineWidth = "5";
// 矩形路径的绘制,但是不填充
context.rect(10, 10, 200, 200)
// 绘制路径
context.stroke();
// 填充路径
// context.fill();
// 关闭路径
context.closePath();
context.beginPath();
context.fillStyle = "blue";
// 矩形路径的填充
context.fillRect(220, 10, 200, 200);
context.closePath();
context.beginPath();
context.fillStyle = "blue";
// 圆形路径的绘制
context.arc(500, 250, 200, 0, Math.PI / 2, false);
context.stroke();
context.fill();
context.closePath();
context.beginPath();
context.strokeStyle = "#fcf";
// 矩形路径的填充
context.moveTo(500, 250);
context.quadraticCurveTo(20, 100, 100, 20)
context.stroke();
context.closePath();
context.beginPath();
context.strokeStyle = "#000";
// 矩形路径的填充
context.moveTo(500, 250);
context.bezierCurveTo(500, 100, 40, 80, 500, 200)
context.stroke();
context.closePath();
</script>
</body>
</html>
Canvas绘制思路
开启路径——>设置属性——>进行路径的变化——>关闭路径——>描边或填充
Canvas效果补充:棋盘绘制
<!doctype html>
<html>
<head>
<meta charset="UTF-8">
<title>HTML5学堂</title>
<link rel="stylesheet" href="../css/reset.css">
<script type="text/javascript" src="../js/jquery-1.8.3.min.js"></script>
</head>
<body>
<div class="wrap">
<canvas width="1200" height="600">
您的浏览器不支持canvas!
</canvas>
</div>
<script>
var testCanvas = $("canvas")[0];
var context = testCanvas.getContext("2d");
context.beginPath();
context.lineWidth = 2;
context.strokeStyle = "pink";
for (var i = 0; i < 26; i++) {
context.moveTo(0, i * 20);
context.lineTo(500, i * 20);
};
context.stroke();
context.beginPath();
context.strokeStyle = "skyblue";
for (var j = 0; j < 26; j++) {
context.moveTo(j * 20, 0);
context.lineTo(j * 20, 500);
};
context.font = "60px Microsoft YaHei";
context.strokeText("HTML5学堂-棋盘", 550, 250);
context.strokeText("梦幻雪冰、独行冰海", 550, 360);
context.stroke();
context.closePath();
</script>
</body>
</html>
效果图如下:
- JBPM4.4(1)-简单工程的搭建
- 未绑定元素“mx:Panel”的前缀“mx”
- [Go 语言社区] Golang架构底层函数图片保存-原创
- [Go 语言社区]Golang架构--服务器与客户端自定义传输规则--原创
- Go语言 -浮点数
- android开发列表界面
- Java中Queue和BlockingQueue的区别
- android使用Activity
- Golang入门-- 2D的图形库学习
- Go语言--简单聊天室程序
- Go语言编程中判断文件是否存在是创建目录的方法
- jquery clone()表格之后查找里边的元素
- 必读:再讲Spark与kafka 0.8.2.1+整合
- windows下如何下载android源码
- 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 数组属性和方法
- 腾讯云中关于授权子用户QCloudResourceFullAccess权限后使用api接口创建购买cvm没有支付权限的解决办法
- centos7中systemctl系统服务和资源限制故障
- centos7 安装zabbix并监控windows服务器
- 宝塔面板插件-shadowsocks可视化管理
- Android面试知识笔记:那些年面试官常问的知识点...(附详细解析)
- 聊聊dubbo-go的failbackCluster
- Docker环境准备
- js实现HTML页面时钟动态显示
- WordPress标题的分隔符-被转义为–的解决办法
- WordPress网站实现下雪特效,云体验下雪的赶脚
- 小知识:后台执行Oracle创建索引免受会话中断影响
- Android:那些关于Fragment生命周期,你了解多少?
- 前端面试(题三)js
- .NET Core EFCore零基础快速入门简单使用
- vscode .vue文件 格式化配置