canvas入门教程-附demo 2021-08-31 一、canvas简介 canvas(“画布”)本身是HTML5提供的一种新标签, 标签本身只是图形容器,需要通过脚本 (通常是JavaScript)可以进行图形的绘制(canvas有多种绘制路径、矩形、圆形、字符以及添加图像的方法)。 canvas目前主要可以应用于游戏、数据可视化、图片的操作等领域。 二、canvas基础用法 1.canvas标签 canvas标签可以说是我们绘制的容器,内容的绘制我们需要依靠canvas的context对象来实现,标签有两个自有的属性width和height,用来规定画布的宽高, 标签支持 HTML 的全局属性,另外我们可以在标签中嵌入后备内容,在不支持的设备上让用户了解当前内容。 您的浏览器不支持canvas,请更换浏览器。 2.canvas的坐标系 在进行绘制操作前我们还需要了解一下canvas的坐标 文章图片 3.基本api context:canvas的上下文、绘制环境,所有操作的api都是基于context,我们需要通过js来操作context来进行绘制,可以结合注释进行学习 从下面的代码中我们可以学习如何进行文字、线段、矩形、圆形等基本图形的绘制 const canvasDom = document.getElementById('myCanvas') // 获取画布元素 const ctx = canvasDom.getContext('2d') // 获取canvas对象 2D绘图的上下文 ctx.font = '38px Arial' // 文本相关设置 ctx.fillStyle = 'orange' // 填充色 ctx.fillText('一些基础图形', 320, 300) // 绘制填充的文本 ctx.fillRect(50, 198, 50, 104) // 绘制矩形ctx.beginPath() // 绘制路径开始 ctx.lineWidth = 3 // 线条宽度 ctx.strokeStyle = 'red' // 填充色 ctx.moveTo(100, 200) // 绘制起点(x, y) ctx.lineTo(300, 300) // 绘制直线(x,y) ctx.lineTo(100, 300) ctx.closePath() // 绘制路径闭合 闭合路径会自动把结束的点和开始的线连在一起 ctx.stroke() // 绘制线段ctx.beginPath() ctx.lineWidth = 16 ctx.strokeStyle = 'blue' ctx.fillStyle = 'green' // 绘制圆形 圆心坐标 半径长度 初始角度 结束角度 顺时针、逆时针绘制 // (x,y,r,sAngle,eAngle,counterclockwise) ctx.arc(220, 194, 50, 0, 1 * Math.PI, false) ctx.stroke() ctx.fill() // 是将闭合的路径的内容进行填充 ctx.beginPath() ctx.strokeStyle = 'green' ctx.fillStyle = 'blue' ctx.arc(220, 194, 50, 0, 1 * Math.PI, true) ctx.stroke() ctx.fill() ctx.beginPath() ctx.fillStyle = 'red' ctx.lineWidth = 2 ctx.rect(110, 240, 50, 50) // 绘制矩形 (x, y, width, height) ctx.stroke() ctx.fill() 运行效果如图: 文章图片 最后我们可以使用clearRect进行清除操作,可以实现涂鸦的橡皮擦也可以整个画面做清空操作参数和绘制矩形一样 坐标以及清除的长宽(x, y, width, hegiht) ctx.clearRect(110, 240, 20, 20) // 清除局部 ctx.clearRect(0, 0, 800, 800) // 初始点坐标 加容器宽高 清除全部 文章图片 图片的绘制会在下面案例进行讲解 三、canvas基础案例 1.图片的放大旋转 绘制图片需要使用drawImage方法 drawImage(img,sx,sy,swidth,sheight,x,y,width,height) 参数 说明 是否必须 img 规定要使用的图像、画布或视频 是 sx 开始剪切的 x 坐标位置 否 sy 开始剪切的 y 坐标位置 否 swidth 被剪切图像的宽度 否 sheight 被剪切图像的高度 否 x 在画布上放置图像的 x 坐标位置 是 y 在画布上放置图像的 y 坐标位置 是 width 要使用的图像的宽度 否 height 要使用的图像的高度 否 下面我们结合实例看一下 您的浏览器不支持canvas,请更换浏览器 您的浏览器不支持canvas,请更换浏览器 旋转 rotate 文章图片 2.本地压缩图片下载&&常规文件格式体积限制 文章图片 3.解决canvas转图片不清晰 在开发中我曾经遇到了绘制的图片看起来十分的模糊,实际上是画布尺寸与画布范围内实际像素不一致造成。为了解决这个问题,优化用户体验我才用的方案是直接解决canvas转图片不清晰,直接容器宽高*2处理的 const canvas = document.getElementById('canvas') canvas.style.backgroundColor = '#FFF' canvas.style.width = _width + 'px' canvas.style.height = _height + 'px' canvas.width = _width * 2 canvas.height = _height * 2 更优的方案应该是根据设备的dpr去做 const canvas = document.getElementById('canvas') const dpr = (scale = window.devicePixelRatio || 1) const rect = canvas.getBoundingClientRect() canvas.width = rect.width * dpr canvas.height = rect.height * dpr canvas.style.width = rect.width + 'px' canvas.style.height = rect.height + 'px' 处理前 文章图片 处理后 文章图片 4.最后附上一个小效果 您的浏览器不支持canvas,请更换浏览器 文章图片 四、浏览器支持 canvas的基础支持基本覆盖当前主流浏览器 canvas在移动端的兼容情况非常不错 IE9以下浏览器可以考虑使用 Explorercanvas 文章图片 *目前3D(WebGL)和2D在一些老版本浏览器兼容有所不同 文章图片 文章图片 【canvas入门教程-附demo】更多相关支持可以查看 caniuse 五、第三方库推荐 IE9以下浏览器使用canvas Explorercanvas echart 可视化图表库 paperjs 矢量图形脚本框架 pixijs 2D sprite渲染引擎 推荐阅读 中药怎么熬 教你正确熬中药四个小步骤 淘宝助理下架了用什么软件 客服办公必备软件 安卓手机看本地漫画,咪咕动漫拥有2万多部正版漫画漫画 公司授权代理进驻电商平台,公司如何授权代理 c语言函数语句分类 c语言中函数分类 pdf如何编辑页眉页脚 迅捷pdf编辑器修改PDF页眉页脚的图文操作步骤 车载低音炮音乐大全 流行时尚歌曲 秦始皇陵墓不挖的真正原因是什么 秦始皇陵墓不挖有何原因 怪物猎人世界冰原据点介绍 怪物猎人世界冰原据点有什么 2020年5月剖腹产好日子 2020年5月剖腹产好日子是什么 安卓小项目的源代码,google搜索源代码查看服务提供商 redis设置用户密码 redis设置密码后访问 PPT怎么做背景 ppt如何换背景 数据分析处理库pandas,Excel数据分析库 linuxredis4 华为m荣耀V40系列再次曝光,网友:有一种“缝合怪”的感觉! 莲雾多少钱一斤 好听撩人的女网名 好听撩人的女网名两个字 自动挡档位图解说明图片 自动挡档位图解说明 夜有所思|夜有所思 8.1 canvas(一)基本用法 通过复盘快速成长(附模板) 国家重点支持的高新技术领域(一) vue|vue canvas 手绘进度条动画 那些经常打开附近人的女人,都是什么心理() 机器学习-5|机器学习-5 朴素贝叶斯【附代码】 canvas不过如此(一) 《触诊与评估技巧》 HTML|HTML canvas中translate()与rotate()的理解 昆明附近,不是花中偏爱菊,此花开过更无花,骑行花海你见过吗()