用html5的canvas和JavaScript创建一个绘图程序的简单实例


Posted in HTML / CSS onJuly 06, 2016

本文将引导你使用canvas和JavaScript创建一个简单的绘图程序。

首先准备容器Canvas元素,接下来所有的事情都会在JavaScript里面。

XML/HTML Code复制内容到剪贴板
  1. <canvas id="canvasInAPerfectWorld" width="490" height="220"></canvas>  

获取绘图环境,context对象提供了用于在画布上绘图的方法和属性

XML/HTML Code复制内容到剪贴板
  1. context = document.getElementById('canvasInAPerfectWorld').getContext("2d");  

开始绘图过程

首先我们需要存储绘图路径点坐标,addClick函数添加坐标点值到数组

JavaScript Code复制内容到剪贴板
  1. var clickX = new Array();   
  2. var clickY = new Array();   
  3. var clickDrag = new Array();//存储路径点   
  4. var paint;//是否绘制,mousedown时置为true   
  5. function addClick(x, y, dragging)   
  6. {   
  7.   clickX.push(x);   
  8.   clickY.push(y);   
  9.   clickDrag.push(dragging);   
  10. }  

redraw函数每次调用整个canvas就会重新绘制一次。首先我们清空画布上内容,设置绘制线条颜色粗细线条连接方式。然后

两点之间绘制一段路径,将数组中的坐标点依次绘制出来

XML/HTML Code复制内容到剪贴板
  1. function redraw(){   
  2.   context.clearRect(0, 0, context.canvas.width,   context.canvas.height); // 清除画布内容   
  3.      
  4.   context.strokeStyle = "#df4b26";//设置线条颜色   
  5.   context.lineJoin = "round";//当两条线条交汇时,创建圆形边角   
  6.   context.lineWidth = 5;//线条粗细   
  7.                
  8.   for(var i=0; i < clickX.length; i++) {           
  9.     context.beginPath();//开始一条路径,或重置当前的路径   
  10.     if(clickDrag[i] && i){   
  11.       context.moveTo(clickX[i-1], clickY[i-1]);   
  12.      }else{   
  13.        context.moveTo(clickX[i]-1, clickY[i]);   
  14.      }   
  15.      context.lineTo(clickX[i], clickY[i]);   
  16.      context.closePath();   
  17.      context.stroke();//绘制路径   
  18.   }   
  19. }  

绘制过程需要的事件

1 mousedown事件

绘图这点击到画布上时,将触发该事件执行。调用了addClick函数,并将paint置为true。

JavaScript Code复制内容到剪贴板
  1. $('#canvas').mousedown(function(e){   
  2.   var mouseX = e.pageX - this.offsetLeft;   
  3.   var mouseY = e.pageY - this.offsetTop;   
  4.   paint = true;   
  5.   addClick(e.pageX - this.offsetLeft, e.pageY - this.offsetTop);   
  6.   redraw();   
  7. });  

2 mousemove事件

mousedown中设置的paint为true后,鼠标移动时触发mousemove事件执行,将鼠标移动的所有点记录下来,并不断调用redraw重绘画布。

JavaScript Code复制内容到剪贴板
  1. $('#canvas').mousemove(function(e){   
  2.    if(paint){   
  3.      addClick(e.pageX - this.offsetLeft, e.pageY - this.offsetTop, true);   
  4.      redraw();   
  5.    }   
  6.  });   

3 mouseup事件

mouseup鼠标点击后松开或者拖拽后松开,表示绘制完成该路径,将paint置为false。

XML/HTML Code复制内容到剪贴板
  1. $('#canvas').mouseup(function(e){   
  2.    paint = false;   
  3.  });  

 

4 mouseleave事件

mouseleave鼠标离开canvas元素,将paint置为false。

XML/HTML Code复制内容到剪贴板
  1. $('#canvas').mouseleave(function(e){   
  2.   paint = false;   
  3. });  

以上这篇用html5的canvas和JavaScript创建一个绘图程序的简单实例就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

原文地址:http://www.cnblogs.com/fangsmile/archive/2016/07/05/5644611.html

HTML / CSS 相关文章推荐
今天学到的CSS最新技术(与图片背景相关)
Dec 24 HTML / CSS
CSS3+js实现简单的时钟特效
Mar 18 HTML / CSS
css3的focus-within选择器的使用
May 11 HTML / CSS
webapp字号大小跟随系统字号大小缩放的示例代码
Dec 26 HTML / CSS
使用html2canvas实现浏览器截图的示例代码
Jan 26 HTML / CSS
HTML5实现的震撼3D焦点图动画的示例代码
Sep 26 HTML / CSS
使用css如何制作时间ICON方法实践
Nov 12 HTML / CSS
input file上传文件样式支持html5的浏览器解决方案
Nov 14 HTML / CSS
谷歌浏览器小字体处理方案即12px以下字体
Dec 17 HTML / CSS
高清屏中使用Canvas绘图出现模糊的问题及解决方法
Jun 03 HTML / CSS
HTML里显示pdf、word、xls、ppt的方法示例
Apr 14 HTML / CSS
Html5大屏数据可视化开发的实现
Jun 11 HTML / CSS
HTML5本地存储之Web Storage详解
Jul 04 #HTML / CSS
Html5实现移动端、PC端 刮刮卡效果
Jun 30 #HTML / CSS
HTML5中原生的右键菜单创建方法
Jun 28 #HTML / CSS
使用HTML5里的classList操作CSS类
Jun 28 #HTML / CSS
HTML5 canvas基本绘图之图形组合
Jun 27 #HTML / CSS
HTML5不支持标签和新增标签详解
Jun 27 #HTML / CSS
HTML5 canvas基本绘图之文字渲染
Jun 27 #HTML / CSS
You might like
PHP的FTP学习(二)
2006/10/09 PHP
将一维或多维的数组连接成一个字符串的php代码
2010/08/08 PHP
php实现的获取网站备案信息查询代码(360)
2013/09/23 PHP
PHP回溯法解决0-1背包问题实例分析
2015/03/23 PHP
利用PHPStorm如何开发Laravel应用详解
2017/08/30 PHP
PHP获取星期几的常用方法小结
2018/12/18 PHP
浅谈PHP各环境下的伪静态配置
2019/03/13 PHP
Laravel 5.4前后台分离,通过不同的二级域名访问方法
2019/10/13 PHP
DOM Scripting中的图片切换[兼容Firefox]
2010/06/12 Javascript
javascript 事件绑定问题
2011/01/01 Javascript
vue+vuex+axio从后台获取数据存入vuex实现组件之间共享数据
2017/04/22 Javascript
微信小程序实现图片懒加载的示例代码
2017/12/13 Javascript
JS验证输入的是否是数字及保留几位小数问题
2018/05/09 Javascript
vue.js与后台数据交互的实例讲解
2018/08/08 Javascript
socket在egg中的使用实例代码详解
2019/05/30 Javascript
在vue项目中使用codemirror插件实现代码编辑器功能
2019/08/27 Javascript
[03:39]DOTA2英雄梦之声_第05期_幽鬼
2014/06/23 DOTA
[58:25]VP vs RNG 2019国际邀请赛小组赛 BO2 第一场 8.15
2019/08/17 DOTA
[52:39]完美世界DOTA2联赛PWL S3 CPG vs Forest 第一场 12.16
2020/12/17 DOTA
Python读写Excel文件方法介绍
2014/11/22 Python
Python编程入门的一些基本知识
2015/05/13 Python
Python3下错误AttributeError: ‘dict’ object has no attribute’iteritems‘的分析与解决
2017/07/06 Python
python处理按钮消息的实例详解
2017/07/11 Python
Python实现字典的遍历与排序功能示例
2017/12/23 Python
详解用Python处理HTML转义字符的5种方式
2017/12/27 Python
Python中collections模块的基本使用教程
2018/12/07 Python
python使用pdfminer解析pdf文件的方法示例
2018/12/20 Python
django模型类中,null=True,blank=True用法说明
2020/07/09 Python
新西兰杂志订阅:isubscribe
2019/08/26 全球购物
旅游个人求职信范文
2014/01/30 职场文书
点菜员岗位职责范本
2014/02/14 职场文书
中西医专业毕业生职业规划书
2014/02/24 职场文书
禁止高声喧哗的标语
2014/06/11 职场文书
学校政风行风评议工作总结
2014/10/21 职场文书
react国际化react-intl的使用
2021/05/06 Javascript
MySQL通过binlog恢复数据
2021/05/27 MySQL