当前位置:网站首页>《canvas》之第10章 canvas路径
《canvas》之第10章 canvas路径
2022-06-29 13:55:00 【yxqq378287007】
《canvas》之第10章 canvas路径
第10章 canvas路径
10.1 什么是路径
| 方法 | 说明 |
|---|---|
| beginPath() | 开始一条新路径 |
| closePath() | 关闭当前路径 |
| isPointInPah() | 判断点是否存在于当前路径内 |
10.2 beginPath()方法和closePath()方法
beginPath()方法和closePath()方法,只运用于canvas基本图形的绘制。
10.2.1 beginPath()方法
canvas基于状态绘制图形,每次绘制(stroke()或fill()),检查当前状态的所有值(strokeStyle、fillStyle、lineWidth等)。
cxt.beginPath();
beginPath()开始新路径,则不同路径使用不同值。
未使用beginPath()开始新路径,后面的值会覆盖前面的值。
未开始新路径(所有cxt.strokeStyle = “blue”)
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title></title>
<meta charset="utf-8" />
<script type="text/javascript"> function $$(id) {
return document.getElementById(id); } window.onload = function () {
var cnv = $$("canvas"); var cxt = cnv.getContext("2d"); cxt.lineWidth = 5; //第1条直线 cxt.moveTo(50, 40); cxt.lineTo(150, 40); cxt.strokeStyle = "red"; cxt.stroke(); //第2条直线 cxt.moveTo(50, 80); cxt.lineTo(150, 80); cxt.strokeStyle = "green"; cxt.stroke(); //第3条直线 cxt.moveTo(50, 120); cxt.lineTo(150, 120); cxt.strokeStyle = "blue"; cxt.stroke(); } </script>
</head>
<body>
<canvas id="canvas" width="200" height="150" style="border:1px dashed gray"></canvas>
</body>
</html>
- 开始新路径(cxt.strokeStyle不同)
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title></title>
<meta charset="utf-8" />
<script type="text/javascript"> function $$(id) {
return document.getElementById(id); } window.onload = function () {
var cnv = $$("canvas"); var cxt = cnv.getContext("2d"); cxt.lineWidth = 5; //第1条直线 cxt.beginPath(); //可省略第一条路径 cxt.moveTo(50, 40); cxt.lineTo(150, 40); cxt.strokeStyle = "red"; cxt.stroke(); //第2条直线 cxt.beginPath(); cxt.moveTo(50, 80); cxt.lineTo(150, 80); cxt.strokeStyle = "green"; cxt.stroke(); //第3条直线 cxt.beginPath(); cxt.moveTo(50, 120); cxt.lineTo(150, 120); cxt.strokeStyle = "blue"; cxt.stroke(); } </script>
</head>
<body>
<canvas id="canvas" width="200" height="150" style="border:1px dashed gray"></canvas>
</body>
</html>
10.2.2 closePath()方法
关闭路径,路径起点和终点连接起来,成为封闭图形。
cxt.closePath();
- 圆弧与扇形
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title></title>
<meta charset="utf-8" />
<script type="text/javascript"> function $$(id) {
return document.getElementById(id); } window.onload = function () {
var cnv = $$("canvas"); var cxt = cnv.getContext("2d"); cxt.arc(70, 70, 50, 0, -90 * Math.PI / 180, true); //cxt.closePath(); cxt.stroke(); } </script>
</head>
<body>
<canvas id="canvas" width="200" height="150" style="border:1px dashed gray;"></canvas>
</body>
</html>
- 箭头
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title></title>
<meta charset="utf-8" />
<script type="text/javascript"> function $$(id) {
return document.getElementById(id); } window.onload = function () {
var cnv = $$("canvas"); var cxt = cnv.getContext("2d"); cxt.moveTo(40, 60); cxt.lineTo(100, 60); cxt.lineTo(100, 30); cxt.lineTo(150, 75); cxt.lineTo(100, 120); cxt.lineTo(100, 90); cxt.lineTo(40, 90); //cxt.closePath();//cxt.lineTo(40, 60); cxt.stroke(); } </script>
</head>
<body>
<canvas id="canvas" width="200" height="150" style="border:1px dashed gray;"></canvas>
</body>
</html>
- beginPath()配合closePath()使用
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title></title>
<meta charset="utf-8" />
<script type="text/javascript"> function $$(id) {
return document.getElementById(id); } window.onload = function () {
var cnv = $$("canvas"); var cxt = cnv.getContext("2d"); cxt.beginPath(); cxt.arc(70, 70, 50, 0, -90 * Math.PI / 180, true); cxt.closePath(); cxt.strokeStyle = "red"; cxt.stroke(); //cxt.beginPath(); cxt.arc(70, 120, 50, 0, -90 * Math.PI / 180, true); cxt.closePath(); cxt.strokeStyle = "blue"; cxt.stroke(); } </script>
</head>
<body>
<canvas id="canvas" width="200" height="150" style="border:1px dashed gray;"></canvas>
</body>
</html>
- 未使用closePath()绘制封闭图形
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title></title>
<meta charset="utf-8" />
<script type="text/javascript"> function $$(id) {
return document.getElementById(id); } window.onload = function () {
var cnv = $$("canvas"); var cxt = cnv.getContext("2d"); cxt.lineWidth = 10; //cxt.beginPath(); cxt.moveTo(40, 60); cxt.lineTo(100, 60); cxt.lineTo(100, 30); cxt.lineTo(150, 75); cxt.lineTo(100, 120); cxt.lineTo(100, 90); cxt.lineTo(40, 90); cxt.lineTo(40, 60); //cxt.closePath(); cxt.strokeStyle = "HotPink"; cxt.stroke(); } </script>
</head>
<body>
<canvas id="canvas" width="200" height="150" style="border:1px dashed gray;"></canvas>
</body>
</html>
10.3 isPointInPah()方法
判断点是否存在于当前路径,不支持strokeRect()和fillRect(),只能用rect()代替。
cxt.isPointInPah(x, y);
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title></title>
<meta charset="utf-8" />
<script type="text/javascript"> function $$(id) {
return document.getElementById(id); } window.onload = function () {
var cnv = $$("canvas"); var cxt = cnv.getContext("2d"); cxt.strokeStyle = "HotPink"; cxt.rect(50, 50, 80, 80); cxt.stroke(); //cxt.strokeRect(50, 50, 80, 80); if (cxt.isPointInPath(100, 50)) {
alert("点(100,100)存在于当前路径中"); } } </script>
</head>
<body>
<canvas id="canvas" width="200" height="150" style="border:1px dashed gray"></canvas>
</body>
</html>
Google和Firefox不支持点在直线上的判断,IE支持。
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title></title>
<meta charset="utf-8" />
<script type="text/javascript"> function $$(id) {
return document.getElementById(id); } window.onload = function () {
var cnv = $$("canvas"); var cxt = cnv.getContext("2d"); cxt.moveTo(50, 50); cxt.lineTo(150, 50); cxt.stroke(); if (cxt.isPointInPath(100, 50)) {
alert("点(50,100)存在于当前路径中"); } } </script>
</head>
<body>
<canvas id="canvas" width="200" height="150" style="border:1px dashed gray"></canvas>
</body>
</html>
边栏推荐
- 【重要通知】中国图象图形学学会2022年度系列奖励推荐工作启动
- Wechat applet: Yunkai publishes white wall wechat applet source code download server free and domain name support traffic main revenue
- Dynamic feedback load balancing strategy based on Cluster
- mysql函数和约束
- Redis transaction mechanism
- 文物数字藏品,开启文化传承的新方式
- 如何优雅的写 Controller 层代码?
- Which is better and safer for Dongguan Humen securities company to open a stock account?
- Introduction to bloom filter
- Equivalence class partition method for test case design method
猜你喜欢

Are you still reading the log by command? Use kibana, one picture is better than ten thousand lines of log

mysql多表查询

vmware虚拟机的作用

微信小程序:全新独家云开发微群人脉

投资人跌下神坛:半年0出手,转行送外卖

Sixty years of deep learning

Stable currency risk profile: are usdt and usdc safe?

微信小程序:万圣节头像框生成工具

广州开展瓶装气安全宣传活动,普及燃气安全知识

Installation and removal of cover for CPU protection on desktop motherboard
随机推荐
Follow me study hcie big data mining Chapter 1 Introduction to data mining module 2
Wechat applet: new and exclusive cloud development wechat group contacts
深度学习的坎坷六十年
Redis的持久化机制
Navicat连接MySQL8.0的正确方法(亲测有效)
Problems in replacing RESNET convolution of mmdet with ghost convolution group
MySQL数据库:读写分离
浅析 Istio——可观测性
[important notice] the 2022 series of awards and recommendations of China graphics society were launched
单项数据流之子组件修改父组件的值
微信小程序:全新独家云开发微群人脉
Seekg() [easy to understand]
【Qt 教程】QPushButton 按键和双击效果
Are you still reading the log by command? Use kibana, one picture is better than ten thousand lines of log
STM32 watchdog study
台式机主板上保护cpu的盖子安装和拆卸
Redis transaction mechanism
Istio网格中访问外部服务方法
JUC多线程:线程池的创建及工作原理
中康控股开启招股:拟募资净额3.95亿港元,预计7月12日上市