本来想尝试用做一个网页版的美图秀秀,可以导入的对图片进行处理,还有制作一些模板可以快速生成人物的表情包,但是做着做着,发现太耗时间了。结果最终只是简单做了一个基于 canvas 的画板。

github地址:https://github.com/linhongbijkm/canvasPainter

在线DEMO:https://linhongbijkm.github.io/canvasPainter/cvs.html

单纯实现 canvas 绘画功能还是比较简单的,以下我只大概说一下绘画功能的实现,至于页面中还包括颜色选择器、图像保存到本地的功能,请到 github 代码仓库下载下来看看。

一、canvas 标签

这个标签定义了一个画布,然后是要用 JavaScript 来调用浏览器 API 来在画布上绘图,所以第一步,就是在页面上加入 canvas 标签;

 <body><canvas id="canvas" width="800px" height="600px"></canvas></body>

二、读取画布

跟 JS 获取其他元素一样,根据 canvas 标签定义的 id 值,用原生函数来选取 canvas 元素,然后调用 getContext('2d') 获取画布环境对象,之后对画布绘图的 API 都由环境对象来调用;

 <script>var canvas = document.getElementById('canvas');var cvs = canvas.getContext('2d');</script>

三、定义画笔的颜色和粗细

 var penWeight = 1;     //画笔粗细var penColor = '#f00'; //画笔颜色

四、监听鼠标点下时事件

鼠标一点下,就开始一次绘画,画笔的起始点是当前鼠标位置,同时设置画笔的属性;

 canvas.onmousedown = function(e){/*找到鼠标(画笔)的坐标*/var start_x = e.clientX - canvas.offsetLeft + document.body.scrollLeft;var start_y = e.clientY - canvas.offsetTop + document.body.scrollTop;cvs.beginPath(); //开始本次绘画cvs.moveTo(start_x, start_y);   //画笔起始点/*设置画笔属性*/cvs.lineCap = 'round';cvs.lineJoin ="round";cvs.strokeStyle = penColor;     //画笔颜色cvs.lineWidth = penWeight;       //画笔粗细/*监听鼠标移动事件*//*监听鼠标松开事件*/}

五、监听鼠标移动和松开事件

为了节省性能,在鼠标松开时候,取消鼠标按住和移动的监听,也就是只有鼠标按下时才监听鼠标移动和松开事件;

 canvas.onmousemove = function(e){/*找到鼠标(画笔)的坐标*/var move_x = e.clientX - canvas.offsetLeft + document.body.scrollLeft;var move_y = e.clientY - canvas.offsetTop + document.body.scrollTop;cvs.lineTo(move_x, move_y);    //根据鼠标路径绘画cvs.stroke(); //立即渲染}canvas.onmouseup = function(e){cvs.closePath(); //结束本次绘画canvas.onmousemove = null;canvas.onmouseup = null;}

整合以上五点,单纯绘图功能的代码如下:

(注:不包含颜色选取、橡皮擦、清空画布功能。如果需要完整版,请到github下载,地址在本文最前面)

<body><canvas id="canvas" width="800px" height="600px"></canvas>
</body><script>var canvas = document.getElementById('canvas');var cvs = canvas.getContext('2d');var penWeight = 1;       //画笔粗细var penColor = '#f00'; //画笔颜色canvas.onmousedown = function(e){/*找到鼠标(画笔)的坐标*/var start_x = e.clientX - canvas.offsetLeft + document.body.scrollLeft;var start_y = e.clientY - canvas.offsetTop + document.body.scrollTop;cvs.beginPath();   //开始本次绘画cvs.moveTo(start_x, start_y);   //画笔起始点/*设置画笔属性*/cvs.lineCap = 'round';cvs.lineJoin ="round";cvs.strokeStyle = penColor;     //画笔颜色cvs.lineWidth = penWeight;       //画笔粗细canvas.onmousemove = function(e){/*找到鼠标(画笔)的坐标*/var move_x = e.clientX - canvas.offsetLeft + document.body.scrollLeft;var move_y = e.clientY - canvas.offsetTop + document.body.scrollTop;cvs.lineTo(move_x, move_y);      //根据鼠标路径绘画cvs.stroke(); //立即渲染}canvas.onmouseup = function(e){cvs.closePath(); //结束本次绘画canvas.onmousemove = null;canvas.onmouseup = null;}}
</script>

运行一下代码看看,比完整版简陋很多:

【JavaScript】基于H5 canvas实现的画板绘图工具(类似你画我猜)——整合颜色选取、保存图片到本地功能相关推荐

  1. 移动端canvas画板绘图工具

    移动端canvas画板绘图工具 原生js canvas画板可在移动端使用,使用鼠标或者手指触屏绘画各种图形效果. 演示地址 下载地址

  2. 基于HTML5 Canvas和jQuery 的画图工具的实现

    简介 HTML5 提供了强大的Canvas元素,使用Canvas并结合Javascript 可以实现一些非常强大的功能.本文就介绍一下基于HTML5 Canvas 的画图工具的实现.废话少说,先看成品 ...

  3. 用canvas实现一个简易绘图工具

    先看效果 这里可以选择颜色,从而进行在600px*400px画布中,随便画 ★HTML架构部分 <!-- HTML架构部分 --> <div><h3>简易绘图工具& ...

  4. webrtc+canvas+socket.io从零实现一个你画我猜 | 掘金技术征文

    开场白 最近键盘坏了,刚好看到掘金有声网的技术征文,想整个键盘.于是就开始从零开始学习webrtc, 一开始看文档就是个素质三连.这么难啊,这咋整啊,这谁顶的住啊.于是就开始全网找资料,很幸运的在掘金 ...

  5. canvas+websocket+vue做一个完整的你画我猜小游戏

    第一次在掘金发文章,瑟瑟发抖. 这个主要是为了学习使用一下canvas和websocket,项目地址.求star- 你画我猜大家应该都玩过,一个人画,其他人猜.目前实现了最基本的功能,慢慢修改. 项目 ...

  6. 基于h5 canvas的模拟时钟javascript程序

    资源下载地址:https://download.csdn.net/download/sheziqiong/85723236 资源下载地址:https://download.csdn.net/downl ...

  7. 绘制六芒星战斗力属性图 —— h5 canvas 初体验

    在黄金的沙滩上 安息着远古的悲剧 在深绿的波涌中 停着灵魂的船 --<眼睛>,顾城 最近用MUI做Web app时想实现一个六芒星战斗力图的(类似LPL赛前战队实力分析图)效果,由于正多边 ...

  8. 几何画板自定义工具_可能是全网最详细:12 款 iPad 绘画工具横评,总有一款适合你...

    自从上次写完 Procreate 的两篇教程后,我收到了许多读者的反馈,很开心.然后我注意到有部分读者提到自己不太能适应 Procreate 的一些功能和画笔效果. 也难免,虽然 Procreate ...

  9. 快速上手!7款简单易用的在线绘图工具推荐

    随着科技的迅猛发展,越来越多的工作需要依赖电脑完成,而画图软件已经成为工作中不可或缺的一部分. 从过去简陋的Microsoft Paint到如今功能强大的Adobe Illustrator和即时设计等 ...

最新文章

  1. 日常工作问题解决:centos7下配置网卡以及查询网卡UUID
  2. php vc9安装包免费下载,phpstudy 2013软件下载-phpstudy 2013安装包pc客户端 - 极光下载站...
  3. 【转蝈蝈俊.net 】SQL Server 2005 配置发送邮件
  4. 机器学习和计算机视觉有关的数学
  5. BeautifulSoup操作xml文件
  6. 【网址收藏】Fedora 34安装Wine、微信
  7. 【Java线程池】Java线程池汇总,看这一篇文章就够了
  8. fonts.googleapis.com加载过慢导致的项目启动过慢的问题
  9. Cakephp 创建无模型的Controller
  10. 键盘常用ASCII码对照表
  11. 合天网安实验室sql注入实验一 WRITE UP
  12. 手机图形计算器matlab,图形计算器Mathlab
  13. 宁西铁路线 宁合线 宁西铁路
  14. 西南地区首次大型“社区面基 Party”落幕,TiDB TechDay 下一站深圳见!
  15. v-for报错Cannot use v-for on stateful component root element because it renders multiple elements.
  16. AppStore上线规则
  17. 迁移学习(Transfer Learning)的背景、历史
  18. 毕业设计说明书(论文)结构-系统设计方面
  19. 《机器学习实战:基于Scikit-Learn、Keras和TensorFlow第2版》-学习笔记(8):降维
  20. 数据结构(六)散列查找 —— 编程作业01 :电话聊天狂人

热门文章

  1. 数字经济数据2009-2019年、数字经济发展指标体系和测算2011-2020年、地级市数字经济数据2011-2019年、数字经济发展指数2011-2020年
  2. python 统计组合用什么库_盘点2018年热门Python库|TOP20
  3. 【LSSVM回归预测】基于matlab麻雀算法优化LSSVM回归预测【含Matlab源码 1128期】
  4. js判断数组中存在,存在就删除
  5. 第六讲 典型相关性分析
  6. 【重新定义matlab强大系列十一】函数rescale数组元素的缩放范围
  7. Centos7更换阿里源
  8. 各种版本QT下载地址与VS2013+QT5.3.1环境搭建过程
  9. Java线程生命周期及常用方法说明
  10. PyCharm专业版安装教程