HTML5简易在线画图工具
继上次学习了HTML5的路径画圆做了动态时钟、异次元空间的反转做了运动的太阳系,这两天将画线、画圆、填充等知识点结合起来做了一个简易的在线画图工具:

查看DEMO:HTML5简易在线画图工具
功能包括自由画笔、橡皮擦、文字填充、画三角形、画圆等,相对我这个新手来说,感觉挺难的,不过还是参考了资料慢慢“拼”出来了。
自由画笔的思路:
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
|
/******* 自由画笔 *******/function dBrush(n){ setStatus(actions,n,1); //鼠标按下的时候 var status = 0; canvas.onmousedown=function(e){ e=window.event||e; var sX=e.pageX-this.offsetLeft; var sY=e.pageY-this.offsetTop; can.beginPath(); can.moveTo(sX,sY); status=1; } //鼠标移动的时候 canvas.onmousemove=function(e){ e=window.event||e; var eX=e.pageX-this.offsetLeft; var eY=e.pageY-this.offsetTop; if(status==1){ can.lineTo(eX,eY); can.stroke(); }else {return false} } //鼠标抬起的时候 canvas.onmouseup=function(){ can.closePath(); status=0; } //鼠标移出canvas画布结束画图 canvas.onmouseout=function(){ can.closePath(); status=0; }} |
填充文字,主要用到fillText(val,x,y):
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
|
/******* 文字 *******/function dText(n){ setStatus(actions,n,1); canvas.onmousedown=function(e){ e=window.event||e; var x=e.pageX-this.offsetLeft; var y=e.pageY-this.offsetTop; var val = window.prompt('输入填充的文字',''); if(val==null) return false; //输入为空则返回 can.fillText(val,x,y); dBrush(0); //填入文字后返回自由画笔工具 } canvas.onmouseup=null; canvas.onmousemove=null; canvas.onmouseout=null;} |
直线工具,主要确定起点和终点,然后lineTo(x,y)就可以了:
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
|
/******* 直线 *******/function dLine(n){ setStatus(actions,n,1); //画直线,鼠标按下时,当前鼠标位置为起点 canvas.onmousedown=function(e){ e=window.event||e; var sX=e.pageX-this.offsetLeft; var sY=e.pageY-this.offsetTop; can.beginPath(); can.moveTo(sX,sY); } //画直线,鼠标抬起时,当前鼠标位置为终点 canvas.onmouseup=function(e){ e=window.event||e; var eX=e.pageX-this.offsetLeft; var eY=e.pageY-this.offsetTop; can.lineTo(eX,eY); can.closePath(); can.stroke(); } canvas.onmousemove=null; canvas.onmouseout=null;} |
最后贴一个空心圆,起点坐标为圆心,鼠标移动距离为半径:
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
|
/******* 空心圆圈 *******/function dArc(n){ setStatus(actions,n,1); var sX=0; //内部的“全局标量” var sY=0; //画空心圆,鼠标按下时,当前鼠标位置为圆心 canvas.onmousedown=function(e){ e=window.event||e; sX=e.pageX-this.offsetLeft; sY=e.pageY-this.offsetTop; } //画空心圆,鼠标抬起时,当前鼠标位置为外圆结束点 canvas.onmouseup=function(e){ e=window.event||e; var eX=e.pageX-this.offsetLeft; var eY=e.pageY-this.offsetTop; var dX=eX-sX var dY=eY-sY; //计算出半径 var r = Math.sqrt(Math.pow(dX,2)+Math.pow(dY,2)); can.beginPath(); can.arc(sX,sY,r,0,360,false); can.closePath(); can.stroke(); } canvas.onmousemove=null; canvas.onmouseout=null;} |
好了,剩下的其他工具代码就不贴了,可以查看DEMO里的源代码。
HTML5简易在线画图工具的更多相关文章
- Processon 一款基于HTML5的在线作图工具
CSDN的蒋涛不久前在微博上评价说ProcessOn是web版的visio,出于好奇私下对ProcessOn进行了一番研究.最后发现无论是在用户体验上,还是在技术上,ProcessOn都比微软的Vis ...
- 一个简单的html5页面在线速成工具!(当然本文主要说下他的成果的结构)
分享一个好玩的web app页面速成工具 当然主要是让大家看下他的原理 看着他的结构大家就该猜到这个了.这个是利用换页之后给当前div加了一个active,然后利用css控制效果 这个毫无疑问是采用最 ...
- 好用的在线画图工具processon
ProcessOn是一款基于SaaS的前沿.高效线上作图工具,它将Visio.Xmind等专业作图工具搬到了"云端" 注册链接:https://www.processon.com/ ...
- canvas实例_在线画图工具
fadsfklasdjfklasjdklfjasdlk;fjasd;lfjaskl;dfjal
- 推荐十款非常优秀的 HTML5 在线设计工具
网络有很多优秀的设计和开发工具可能大家都不知道,因此这篇文章就向设计师推荐十款优秀 HTML5 在线工具,这些工具能够帮助设计师们设计出更有创意的作品.随着 HTML5 技术的不断成熟,网络上涌现出越 ...
- HTML5 canvas 在线画笔绘图工具(三)
组装画板(TDrawBuilder) 在这一小节中我们要把工具条和画板组装起来,让他们可以协同进行工作. 画板通过一个命名为TDrawBuilder来进行组装.在详细讲解TDrawBuilder对象之 ...
- HTML5 canvas 在线画笔绘图工具(一)
HTML5 canvas 在线画笔绘图工具(一) 功能介绍 这是我用Javascript写的第一个程序,在写的过程中走了很多弯路,所以写完之后想分享出来,给与我一样的初学者做为学习的参考,同时在编写这 ...
- HTML5 canvas 在线画笔绘图工具(二)
Canvas+Javascript 带图标的工具条制作 TToolbar 工具条是由一个TToolbar对象和两个按钮对象(TImageButton.TColorButton)组成,因为之前我大部分时 ...
- 9款国内外垂直领域的在线作图工具:那些可以替代Visio的应用!【转】
http://www.csdn.net/article/2015-02-12/2823939 摘要:现在越来越多的创业公司都希望提升办公的效率,今天介绍的几款也能提升办公效率,不过它们都属于垂直领域的 ...
随机推荐
- LINUX命令行操作
Linux 命令行快捷键 7条回复 涉及在linux命令行下进行快速移动光标.命令编辑.编辑后执行历史命令.Bang(!)命令.控制命令等.让basher更有效率. 说明 Ctrl – k: 先按住 ...
- gpload的简单实用
准备工作: 1.因为gpload是对gpfdist的封装,因此使用gpload之前必须开启gpfdist的服务,不然无法使用. gpfdist -d /home/admin -p 8181 -l /t ...
- postman本地或远程访问不了
问题postman: 问题描述: 1.手动测试过不去http://121.199.54.31:8081/suppliers/Split 2.localhost:8080/microshop-settl ...
- django基本命令备忘录
1. 新建一个 django project django-admin.py startproject project-name 新建 app python manage.py startapp ap ...
- c++中的vector原理
vectorvector就是动态数组.它也是在堆中分配内存,元素连续存放,有保留内存,如果减少大小后,内存也不会释放.如果新值>当前大小时才会再分配内存. 它拥有一段连续的内存空间,并且起始地址 ...
- 关于Keil的安装与注册
由于前一段时间一直在做关于stm32f407的相关内容,于是安装的Keil是MDK5,最近一阵子想再看看51单片机以前没有做过的内容,就要再安装一个Keil C51,结果就不可避免的遇到了两个软件必须 ...
- DPI/PPI/dp/sp/px/pt 移动设计手册
转自DPI/PPI/dp/sp/px/pt 移动设计手册 做移动设计的同学,不管是原生app或者web app,应该对字体字号都是很头痛的问题.根本原因是,我们用唯一分辨率的电脑,设计各个不同尺寸大小 ...
- Two shortest
sgu185:http://acm.sgu.ru/problem.php?contest=0&problem=185 题意:找两条最短路径,没有边相交的最短路劲,并且输出路径. 题解:这一题和 ...
- 编译direct show 的filter项目
最近搞windows编程,想学习一下direct show.编译了一下sdk里面的一个sample filter,做个笔记,记录一下. 说来渐愧,vc也用了n久了,还没有自己动手建立一个正式的项目,都 ...
- jinfo命令(Java Configuration Info)
jinfo可以输出并修改运行时的java 进程的opts.用处比较简单,用于输出JAVA系统参数及命令行参数.用法是jinfo -opt pid 如:查看2788的MaxPerm大小可以用 jin ...