HTML5教程关于canvas的线条知识,可以这样总结方法
xsobi 2024-12-01 05:38 1 浏览
本文为兄弟连云课堂《HTML5教程canvas学习:线条知识总结》学习笔记 订阅走一波。
前言
初次学习HTML5绘图canvas线条部分内容,特写下本篇博文总结,以供今后可以复习使用。在本篇博文中,主要记录在实际使用中需要注意的事项,并记录一个由多个五角星组成的简单星云案例。本文中不对具体的API使用方法进行说明,需要查看用法请自行搜索。
canvas公共部分
HTML部分
HTML5中要使用canvas绘图,必须在HTML文件中使用<canvas>标签,不能换成其他标签。该标签中可以包含一个id或者class属性,也可以不包括,只要能在操作DOM时找到指定canvas节点即可,建议最好使用id来表示,id具有唯一性,获取节点方便。标签样式可以设置,也可以不设置。在标签之间的内容为提示性语句,如果浏览器支持HTML5的<canvas>标签,该部分内容会被忽略,如果不支持,会显示该部分内容,代码示例如下,其中设置display是为了在不支持<canvas>标签的浏览器中能以块元素显示内容,如果不设置,会将自定义元素默认为内联元素。
123 | <canvas id="canvas" style="display: block;border:1px solid red;margin:50px auto"> 您的浏览器不支持canvas绘图程序,请换用高版本IE浏览器或其他支持canvas的浏览器,如谷歌、火狐、oprea。</canvas> |
JavaScript部分
在通常情况下,我们都是等待DOM加载完毕后执行JavaScrip脚本内容,因此,我们需要在onload事件中编写我们的脚本内容。
代码示例如下:
1234567 | window.onload=function(){ var canvas=document.getElementById("canvas"); //获取画布DOM元素 canvas.height=800; //设置画布的高度 canvas.width=800; //设置画布的宽度 var context=canvas.getContext("2d"); //声明绘制的图形为2d类型 //下面是具体的绘图内容} |
通过示例可以看到,绘图时要先找到canvas节点,再通过其getContext方法得到绘图区,其中canvas变量,整个canvas标签的区域,即画布的宽高,及图形类型”2d”或”3d”都可以根据实际自行定义,但API不能更换,这部分是绘制所有canvas图形时都需要有的部分。
直线绘图API总结
API功能总结
(1). canvas.moveTo(x,y)
功能:与我们使用笔来画线类似,这个函数类似于将笔尖移动到指定的点,即坐标(x,y)。
使用场景:在canvas初始化后或者调用canvas.beginPath()后用来设置起点。另外,在需要绘制不连续的线段时,也需要使用此方法移动目标点。
下面是从FireFox官网MDN网站上摘取的一个绘制笑脸图案的代码(arc方法用来绘制弧形):
12345678910111213141516 | function draw() { var canvas = document.getElementById('canvas'); if (canvas.getContext){ var ctx = canvas.getContext('2d'); ctx.beginPath(); ctx.arc(75,75,50,0,Math.PI*2,true); // 绘制 ctx.moveTo(110,75); ctx.arc(75,75,35,0,Math.PI,false); // 口(顺时针) ctx.moveTo(65,65); ctx.arc(60,65,5,0,Math.PI*2,true); // 左眼 ctx.moveTo(95,65); ctx.arc(90,65,5,0,Math.PI*2,true); // 右眼 ctx.stroke(); }} |
(2). context.lineTo(x,y)
功能:绘制一条从当前到指定位置坐标(x,y)的一条直线。
使用场景:直线的起点可以使用context.moveTo(x,y)来设置,再使用context.lineTo(x,y)将两个点连成一条线段,也可以只使用两个context.lineTo(x,y)来连成一条线段。当需要多条线段时,可以使用多个context.lineto(x,y)连接。
绘制一条直线的例子:
123 | context.lineTo(100,200);context.lineTo(500,500);context.stroke(); |
(3). context.stroke()
功能:通过线条来绘制图形轮廓,只有使用了该方法,才能在屏幕上显示出线条。
(4). context.strokeStyle=”[color]”
功能:设置线条的颜色。color值为CSS支持的所有种类颜色值。
(5). context.beginPath()
功能:新建一条路径,即重新开始一段绘图路径。
使用场景:需要绘制不同颜色线条、不同填充色等线条图形时,需要使用context.beginPath()和context.closePath()包围绘图区块。
(6). context.closePath()
功能:与context.beginPath()相反,该方法关闭区域,当绘制闭合的图形时需要使用这对方法。
(7). context.fillStyle=”[color]”
与context.strokeStyle类似,不同点是,该方法用来填充内部区颜色,颜色值也同样是CSS支持的所有值。
(8). context.fill()
与context.stroke()类似,不同的是,该方法对线段组成的图形进行内部颜色填充。
注意:canvas绘图时,后面的绘制的图形如果与前面绘制的图形有重叠,那么后面的图形将显示在上层,下层图形会被覆盖,如果上层图形设置了透明度,下面的图形覆盖部分将会有部分颜色显示。因此,在实际使用中,需要先使用context.fill()再使用context.stroke(),可以防止线条被填充的颜色覆盖。
在一个canvas标签内绘制多个不同颜色等标签时,使用context.beginPath()和context.closePath()绘制时,将stroke放在后面,而使用context.fillRect()时需放方法前面,否则会出现样式覆盖问题。如果想所有的样式一致,可以值设置一个样式。
下面是一个小的示例:
功能:直接绘制矩形,x,y是起点坐标,width和height是矩形的宽和高。
使用场景:绘制指定宽高矩形时可以直接使用,绘制出来的是空心的矩形。如果需要自定义样式,在需求多个图形样式有各自的风格时,必须在调用该方法之前设置fillStyle或strokeStyle方法。
(10). context.fillRect(x,y,width,height)
功能:直接绘制填充颜色的矩形。设置样式如context.rect()
(11). context.lineCap=”[value]”
功能:在线段两端添加特定样式,value值为:butt,默认,添加平直的边缘;round,添加圆形线帽;square,添加正方形线帽。
下面是展示几种不同属性值的样式代码示例:
功能:设置两条线段相交的样式,如>交接的地方即由此方法设置。value值有:bevel,创建斜角;round,创建圆角;miter 默认,创建尖角。
(13). context.lineWidth=value
功能:设置线条的粗细,value为数值,如context.lineWidth=1。
使用多个五角星实现星云图案
最后记录下使用直线绘图知识实现的综合案例:通过绘制多个五角星,实现星云排布。五角星主要是通过两个圆,内圆与外圆五等分找出五个点,通过直线连接实现;星云则是通过随机数产生偏移位置和随即设置五角星内外圆半径产出不同大小五角星实现。
最后,给出源代码。
结语
本文到此结束了,通过学习,给我的感受就是,单个API的功能很容易记住,但是在实际使中常常会遇到很多问题,因此,多练习才是真正掌握知识的不二法门。谢谢您的阅读,订阅走一波。
相关推荐
- 好用的云函数!后端低代码接口开发,零基础编写API接口
-
前言在开发项目过程中,经常需要用到API接口,实现对数据库的CURD等操作。不管你是专业的PHP开发工程师,还是客户端开发工程师,或者是不懂编程但懂得数据库SQL查询,又或者是完全不太懂技术的人,通过...
- 快速上手:Windows 平台上 cURL 命令的使用方法
-
在工作流程中,为了快速验证API接口有效性,团队成员经常转向直接执行cURL命令的方法。这种做法不仅节省时间,而且促进了团队效率的提升。对于使用Windows系统的用户来说,这里有一套详细...
- 使用 Golang net/http 包:基础入门与实战
-
简介Go的net/http包是构建HTTP服务的核心库,功能强大且易于使用。它提供了基本的HTTP客户端和服务端支持,可以快速构建RESTAPI、Web应用等服务。本文将介绍ne...
- #小白接口# 使用云函数,人人都能编写和发布自己的API接口
-
你只需编写简单的云函数,就可以实现自己的业务逻辑,发布后就可以生成自己的接口给客户端调用。果创云支持对云函数进行在线接口编程,进入开放平台我的接口-在线接口编程,设计一个新接口,设计和配置好接口参...
- 极度精神分裂:我家没有墙面开关,但我虚拟出来了一系列开关
-
本内容来源于@什么值得买APP,观点仅代表作者本人|作者:iN在之前和大家说过,在iN的家里是没有墙面开关的。...
- window使用curl命令的注意事项 curl命令用法
-
cmd-使用curl命令的注意点前言最近在cmd中使用curl命令来测试restapi,发现有不少问题,这里记录一下。在cmd中使用curl命令的注意事项json不能由单引号包括起来json...
- Linux 系统curl命令使用详解 linuxctrl
-
curl是一个强大的命令行工具,用于在Linux系统中进行数据传输。它支持多种协议,包括HTTP、HTTPS、FTP等,用于下载或上传数据,执行Web请求等。curl命令的常见用法和解...
- Tornado 入门:初学者指南 tornados
-
Tornado是一个功能强大的PythonWeb框架和异步网络库。它最初是为了处理实时Web服务中的数千个同时连接而开发的。它独特的Web服务器和框架功能组合使其成为开发高性能Web...
- PHP Curl的简单使用 php curl formdata
-
本文写给刚入PHP坑不久的新手们,作为工具文档,方便用时查阅。CURL是一个非常强大的开源库,它支持很多种协议,例如,HTTP、HTTPS、FTP、TELENT等。日常开发中,我们经常会需要用到cur...
- Rust 服务器、服务和应用程序:7 Rust 中的服务器端 Web 应用简介
-
本章涵盖使用Actix提供静态网页...
- 我给 Apache 顶级项目提了个 Bug apache顶级项目有哪些
-
这篇文章记录了给Apache顶级项目-分库分表中间件ShardingSphere提交Bug的历程。说实话,这是一次比较曲折的Bug跟踪之旅。10月28日,我们在GitHub上提...
- linux文件下载、服务器交互(curl)
-
基础环境curl命令描述...
- curl简单使用 curl sh
-
1.curl--help#查看关键字2.curl-A“(添加user-agent<name>SendUser-Agent<name>toserver)”...
- 常用linux命令:curl 常用linux命令大全
-
//获取网页内容//不加任何选项使用curl时,默认会发送GET请求来获取内容到标准输出$curlhttp://www.baidu.com//输出<!DOCTYPEh...
- 三十七,Web渗透提高班之hack the box在线靶场注册及入门知识
-
一.注册hacktheboxHackTheBox是一个在线平台,允许测试您的渗透技能和代码,并与其他类似兴趣的成员交流想法和方法。它包含一些不断更新的挑战,并且模拟真实场景,其风格更倾向于CT...
- 一周热门
- 最近发表
-
- 好用的云函数!后端低代码接口开发,零基础编写API接口
- 快速上手:Windows 平台上 cURL 命令的使用方法
- 使用 Golang net/http 包:基础入门与实战
- #小白接口# 使用云函数,人人都能编写和发布自己的API接口
- 极度精神分裂:我家没有墙面开关,但我虚拟出来了一系列开关
- window使用curl命令的注意事项 curl命令用法
- Linux 系统curl命令使用详解 linuxctrl
- Tornado 入门:初学者指南 tornados
- PHP Curl的简单使用 php curl formdata
- Rust 服务器、服务和应用程序:7 Rust 中的服务器端 Web 应用简介
- 标签列表
-
- grid 设置 (58)
- 移位运算 (48)
- not specified (45)
- patch补丁 (31)
- strcat (25)
- 导航栏 (58)
- context xml (46)
- scroll (43)
- element style (30)
- dedecms模版 (53)
- vs打不开 (29)
- nmap (30)
- webgl开发 (24)
- parse (24)
- c 视频教程下载 (33)
- paddleocr (28)
- listview排序 (33)
- firebug 使用 (31)
- transactionmanager (30)
- characterencodingfilter (33)
- getmonth (34)
- commandtimeout (30)
- hibernate教程 (31)
- label换行 (33)
- curlpost (31)