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渲染引擎 推荐阅读 正翔语一百贝51丨进入青春期的老妈 小米手机2015数据分析,小米官方旗舰店数据分析 多吃蔬菜是否可能造成胃肠不适? 产后减肥 常吃一物甩脂效果好 关于 爱 的定义 关于爱的定义 在哪查询北京市月最低工资标准 windg 分析 咸鱼电商卖什么卖的快一点 咸鱼电商卖什么卖的快,咸鱼电商卖什么卖的快 2000支付宝红包怎么用?有2000的支付宝红包怎么用 韩国电影《奸臣》讲的是什么故事? 如何成为年入百万的网红主播,尤其在5G移动网络时代! 网络项目需求分析报告,图书管理系统项目需求分析报告 「小程序制作」微信小程序商城制作好后该如何运营? 科比单场81分的比赛数据 vue数据间prop的双向数据绑定 吉他单板和双板的区别 家用吧台设计怎么样 家里设计吧台实用吗 11月25日科技资讯|网易回应裁撤生病员工(确实存在简单粗暴不近人情行为) 强者之路最快 强者之路怎么加速 三星s8的usb调节在哪 三星s8的usb调试在哪 canvas(一)基本用法 通过复盘快速成长(附模板) 国家重点支持的高新技术领域(一) vue|vue canvas 手绘进度条动画 那些经常打开附近人的女人,都是什么心理() 机器学习-5|机器学习-5 朴素贝叶斯【附代码】 canvas不过如此(一) 《触诊与评估技巧》 HTML|HTML canvas中translate()与rotate()的理解 昆明附近,不是花中偏爱菊,此花开过更无花,骑行花海你见过吗()