【前端】【canvas详解 非常详细的使用方法】

这篇具有很好参考价值的文章主要介绍了【前端】【canvas详解 非常详细的使用方法】。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

canvas详解 非常详细的使用方法

一、 canvas介绍

是html5新增元素,通过canvas生成一块画布,在画布上使用javascript来绘制图形或实现图形动画。

两个属性:

width

height,
不加单位 默认px,设置画布的宽高,如果不设置,会默认一个300*150的画布

<body>
<canvas >
不是所有浏览器都支持,可以在标签内提示,您的浏览器不支持canvas,请升级
 </canvas>
</body>

有了画布以后就可以使用js获取canvas元素节点,进行渲染上下文

<body>
<canvas class="canvas"> </canvas>

<script>
const cvs = document.querySelector('.canvas')
const ctx = cvs.getContext('2d')
</script>

</body>

画一个填充矩形

有了画布以后就可以使用js获取canvas元素节点,进行渲染上下文,这里举一个栗子
ctx.fillRect(20,20,200,100)

canvas坐标轴的概念

坐标原点在左上角,页面作画是从左到右从上到下
• x轴往右
• y轴往下

二、渲染上下文

在canvas画布上绘制图形,首先用getContext()方法获取上下文
类似于ps内的工具箱,利用canvas的上下文内拿到各种属性方法来进行绘制

可以传入类型

• 2d, 创建二维平面的渲染上下文 主要讲2d

getContext(‘2d’)返回一个CanvasRendering2D对象,绘制过程中使用的绘制方法,绘制属性都来自CanvasRendering2D对象

有关笔触设置的属性
属性 描述 备注
fillStyle 设置填充的颜色和样式 可设置color颜色或渐变对象
strokeStyle 设置笔描边的颜色和样式 可设置color颜色或渐变对象
lineWidth 设置笔触的厚度 即线段的厚度
有关模糊阴影设置的属性
属性 描述 备注
shadowBlur 设置模糊阴影
shadowOffsetX 设置阴影水平位移
shadowOffsetY 设置阴影垂直位移
shadowColor 设置阴影的颜色
有关文本设置的属性
属性 描述 备注
font=(italic 48px Microsoft YaHei,Fira Sans,serif) 设置文本的字体样式 和css的font相同的书写规则font-family,font-size,font-style,font-weight,canvas内最少要设置font-family,font-size
textAlign 设置文本的水平对齐方式 left文本的左侧与参考点重合对齐,right文本的右侧与参考点重合,center文本中间位置与参考点重合,start,end
textBaseline 设置文本垂直的对齐方式 top文本的上侧与参考点重合对齐,bottom文本的下侧与参考点重合对齐,middle文本的中侧与参考点重合对齐hanging基线是悬挂基线,alphabetic基线是标准的文本基线,)
路径和路径绘制方法
方法名 描述 语法
beginPath 创建一个新的路径 beginPath( )
closePath 尝试封闭路径 closePath( )
stroke 给已有的子路径描边 stroke( )
fill 给子路径填充
moveTo 移动笔触到指定位置点 moveTo(x,y)
lineTo 从前一个点到指定点创建一个子路径 lineTo(x ,y )
arc 创建一段圆弧路径 arc(x,y,radius,startAngle,endAngle,anticlockwise)
bezierCurveTo 创建一个贝塞尔曲线路径 bezierCurveTo(ctr1x ,ctr1y ,ctr2,xctr2y,x,y)
rect 创建一个矩形路径 rect(x,y,width,heiht)
fillRect 直接绘制出一个填充矩形 fillRect(x,y,width,heiht)
strokeRect 直接绘制出描边矩形 strokeRect(x,y,width,heiht)
clearRect() 清空画布指定区域 clearRect(x,y,width,height)
lineCap 设置线段末端样式 值:默认butt,round线条会在末端增加线条宽度一半 的长度,
文本方法
方法名 描述 语法
fillText() 用于绘制填充文本 fillText(text,x,y,[maxWidth])
strokeText() 用于绘制描边文本 strokeText(text,x,y,[maxWidth])
measureText() 返回包含指定文本宽度的对象
图像方法
方法名 描述 语法
fillText() 用于绘制填充文本 fillText(text,x,y,[maxWidth])
strokeText() 用于绘制描边文本 strokeText(text,x,y,[maxWidth])
measureText() 返回包含指定文本宽度的对象

• webgl 创建三维平面的渲染上下文

绘制线条

两点连成一个线条

新的路径  每开一条路径,需要设置新的lineWidth、strokeStyle需要用beginPath()隔开
避免下面的样式相互作用影响
cxt.beginPath()
设置线条宽度
cxt.lineWidth = 10

设置末端样式
cxt.lineCap = 'round'
设置描边颜色
cxt.strokeStyle = 'red'
先绘制路径
cxt.moveTo(20,20)   移动笔触到指定位置点
cxt.lineTo(100,20)  从前一个点到指定点创建一个子路径,此时只是生成一个路径,还需要描边才能看到


绘制第二条线条 ,可以以第一个线条的终点作为起点
cxt.lineTo(100,100)
依次以第二条线的终点作为第三条线的起点,可以画出一个矩形

最后一条线也可以不使用调用lineTo,使用closePath()尝试封闭路径,这样也可以形成一个矩形
cxt.closePath()

填充描边
cxt.stroke()       给已有的子路径描边
 
    const cvs = document.querySelector(".canvas");
    let gap = 50;
    let row = Math.floor(cvs.width / gap);
    let line =  Math.floor(cvs.height / gap)
    const ctx = cvs.getContext("2d");
    for (let index = 1; index < row; index++) {
        ctx.strokeStyle = 'red'
      ctx.moveTo(index * gap, 0);
      ctx.lineTo(index * gap, cvs.height);
      ctx.stroke();
    }
    for (let index = 1; index < line; index++) {
        ctx.strokeStyle = 'red'
      ctx.moveTo(0, index*gap);
      ctx.lineTo(cvs.width, index*gap);
      ctx.stroke();
    }

绘制矩形

确定一个起点的x,y轴坐标,确定绘制的矩形的width、height

调用rect( )方法可以创建一个矩形路径  并没有绘制出来
cxt.rect()   rect(x,y,width,heiht)

设置描边颜色
cxt.strokeStyle = 'red'
设置填充颜色
cxt.fillStyle = "orange"
填充描边
cxt.stroke()       给已有的子路径描边
也可调用  fill()   进行填充路径
cxt.fill()

fillRect()绘制一个填充矩形  参数x,y,width,heiht  不需要调用stroke() 
strokeRect()绘制一个描边矩形  参数x,y,width,heiht 不需要调用stroke()


  const cvs = document.querySelector(".canvas");
    let gap = 50;
    let row = Math.floor(cvs.width / gap);
    let line = Math.floor(cvs.height / gap);
    const ctx = cvs.getContext("2d");

    for (let i = 0; i < row; i++) {
      for (let j = 0; j < line; j++) {
          if(j%2){
            if (i % 2) {
                ctx.fillStyle = "blue";
                ctx.fillRect(i * gap,j * gap, gap, gap);
              } else {
                ctx.fillStyle = "#000";
                ctx.fillRect(i * gap, j * gap, gap, gap);
              }
          }else{
            if (i % 2) {
                ctx.fillStyle = "#000";
                ctx.fillRect(i * gap,j * gap, gap, gap);
              } else {
                ctx.fillStyle = "blue";
                ctx.fillRect(i * gap, j * gap, gap, gap);
              }
          }
       
      }
    }

动画

动画就是一个一个图片连贯起来

使用setInterval()
let x = 20
let timer = setInterval(()=>{
清空画布
ctx.clearRect(0,0,cvs.width,cvs.height)
更改坐标位置或者其他信息(大小、颜色等图形信息)
x++
重新绘制
ctx.fillRect(x,20,100,100)
if(x===cvs.width){
clearInterval(timer)
},1)
使用mdn的动画关键帧

使用mdn 的window.requestAnimationFrame

window.requestAnimationFrame(
()=>{
let x = 20
清空画布
ctx.clearRect(0,0,cvs.width,cvs.height)
更改坐标位置或者其他信息(大小、颜色等图形信息)
x++
重新绘制
ctx.fillRect(x,20,100,100)

}

)

绘制文本

fillText()和strokeText()
fillText(‘text’,x,y,[maxWidth])和strokeText(‘text’,x,y,[maxWidth)
它们都接收四个参数:
• text:要绘制的字符串
• x:文字的起始X坐标
• y:文字的起始Y坐标
• maxWidth:可选参数,文本在画布上的最大宽度,如果指定了该值,文本宽度超出会自动水平缩放

cxt.font = '48px'
cxt.fillText('哈哈哈'2020)
cxt.strokeText('嘿嘿嘿嘿'20200)

圆弧知识

绘制圆弧arc(),以(x,y)坐标为圆心,绘制指定半径的圆或圆弧
arc(x,y,r,startAngle,endAngle,[directron])
参数
• x:圆心x轴坐标
• y:圆心y轴坐标
• r:圆弧半径
• startAngle:圆弧的起始弧度位置,单位以弧度表示
• endAngleqi’shi:圆弧的终止位置,单位以弧度表示
• directron:决定绘制圆弧的顺序,默认false顺时针旋转,true逆时针旋转
弧度和角度换算:
180°=1Π = 1Math.PI
周长=2Π
r =2Math.PIr
弧长=圆心角度Math.PIr/180文章来源地址https://www.toymoban.com/news/detail-772741.html

到了这里,关于【前端】【canvas详解 非常详细的使用方法】的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 前端使用视频作为背景图的方法

    通过 video + source 引入视频,并对视频播放属性进行设置,再通过 css 使视频覆盖背景即可。 👇觉得有帮助的朋友可以支持下作者哦,您的鼓励是我创作的最大动力,如有开发问题可联系作者

    2024年02月04日
    浏览(31)
  • 前端Base64 编码和解码的使用方法

    使用 Base64 类从 ‘js-base64’ 库进行 Base64 编码和解码 vue: 使用 npm 或 yarn 包管理器来安装‘js-base64’ 库 原生: 通过 vue: 导入 Base64 类: 或者: vue: Base64 编码的使用示例: Base64 解码的使用示例: 或者,导入 encode 和 decode 函数: Base64 编码的使用示例: Base64 解码的使用示例

    2024年02月07日
    浏览(34)
  • ADO.Net前端页面调用后台方法使用

    1、前台页面定义GetSource方法,传入列表显示字段; 2、后台页面定义Public公共类型的方法GetSource; 3、后台可以根据字段值判断列中需要显示的图标、数值;

    2024年02月01日
    浏览(36)
  • 什么是组件,以及前端各种框架组件的使用方法

    🙂博主:小猫娃来啦 🙂文章核心: 介绍什么是组件,以及前端各种框架组件的使用方法 ⭐组件就像是搭积木一样的东西,可以用来构建软件或者系统。每个组件都有自己独立的功能和任务,就像一个小小的部件。你可以把这些小部件组合在一起,形成一个完整的应用程序

    2024年02月12日
    浏览(39)
  • C# 使用 RabbitMQ 的详细使用方法

    C# 使用 RabbitMQ 的详细使用方法) RabbitMQ 是一个功能强大的消息队列系统,可用于在分布式系统中进行可靠的消息传递。本篇博客将详细介绍如何在 C# 中使用 RabbitMQ 实现各种消息队列操作,包括连接 RabbitMQ 服务器、创建通道、声明队列、发布消息以及消费消息等。 RabbitMQ 是一

    2024年04月25日
    浏览(29)
  • SQLMAP工具 详细使用方法

    官方网址 GitHub地址 使用手册 SQLMAP 是一个开源的渗透测试工具,可以用来自动化的检测,利用 SQL 注入漏 洞,获取数据库服务器的权限。它具有功能强大的检测引擎,针对各种不同类型数据 库的渗透测试的功能选项,包括获取数据库中存储的数据,访问操作系统文件甚至可

    2024年02月11日
    浏览(37)
  • 前端实现el-pagination分页组件纯前端分页使用方法

    又是被后端欺负的一天,做了个公司的老项目,表格分页后端没法做,那就只能前端来完成。这里我介绍两种方法,需要的自提。 1、表格数据 2、分页定义属性 3、分页逻辑处理 4、初始化调用 1、表格数据处理 2、分页表格处理 3、分页定义属性 4、分页逻辑处理 两种方法都

    2024年02月15日
    浏览(37)
  • SpringBoot+Swagger详细使用方法

    swagger是当下比较流行的实时接口文文档生成工具。接口文档是当前前后端分离项目中必不可少的工具,在前后端开发之前,后端要先出接口文档,前端根据接口文档来进行项目的开发,双方开发结束后在进行联调测试。 1、在pom.xml文件中添加swagger相关依赖 第一个是API获取的

    2024年02月05日
    浏览(25)
  • Python:列表的详细使用方法

    本篇文章将对列表的使用方法进行详尽说明(本人第一次写文章,若有不当之处,还请指正) 开发环境:Python3.8 1.1、列表的两种表示方法:  列表里可以存储不同的数据类型 1.2、生成各个各样的列表 运行结果:   1.3、查询列表中的元素(索引、切片): 索引: 运行结果:

    2023年04月09日
    浏览(43)
  • BertTokenizer的使用方法(超详细)

    导入 以上两行代码都可以导入BerBertTokenizer,transformers是当下比较成熟的库,pytorch_pretrained是google提供的源码(功能不如transformers全面) 加载 数据 首先定义一些数据: tokenize 将句子拆分为token,并不映射为对应的id convert_tokens_to_ids 将token映射为其对应的id(ids是我们训练中真正会

    2024年01月16日
    浏览(21)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包