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渲染引擎 推荐阅读 乡镇电商如何加盟,乡镇电商怎么做 金铲铲之战1.23b北地拉面熊怎么玩 金铲铲之战时空裂痕1.23b阵容推荐 太阳的表面温度是多少 太阳的表面温度 dropbox搭建 Dropbox作为Git服务器的操作步骤 常见的AirPods问题有哪些,该如何解决? Doinb比赛独创卡萨丁100%胜率玩法,前期稳定优势,战绩39-1-14,怎么评价? 生蚝怎样存放 win10系统之家官网最新推荐 python程序设置执行密码,python设置用户名和密码 冰箱|都说隔夜茶无害,为何夏天不能喝隔夜茶呢?听听老茶客的经验之谈 LeetCode|LeetCode 剑指 Offer 22. 链表中倒数第k个节点 如果现在你65岁,怎么过好每一天? 秋天到了大地回发生什么变化 爱思助手进行截图的具体使用教程视频 爱思助手进行截图的具体使用教程 安卓 开机自启热点,s10热点开机自启步骤如图 土豆炖肉做法 土豆炖肉做法大全家常 可以制作图片的软件免费的 免费图片转文字app 新诗《隐痛》(中英双语) 空调是否漏氟怎么查 空调如何自己检测是否漏氟 卧室如何摆放家具好看 卧室如何摆放家具,卧室如何摆放家具风水好 canvas(一)基本用法 通过复盘快速成长(附模板) 国家重点支持的高新技术领域(一) vue|vue canvas 手绘进度条动画 那些经常打开附近人的女人,都是什么心理() 机器学习-5|机器学习-5 朴素贝叶斯【附代码】 canvas不过如此(一) 《触诊与评估技巧》 HTML|HTML canvas中translate()与rotate()的理解 昆明附近,不是花中偏爱菊,此花开过更无花,骑行花海你见过吗()