使用Canvas制作画图工具
2017-11-15 16:55
716 查看
前 言
JRedu
canvas是HTML5中重要的元素之一,canvas元素使用JavaScript在网页上绘制图像,画布是一个矩形区域,我们可以控制其每一个元素,并且canvas拥有多种的绘制路径、矩形、圆形、字符以及添加图像的方法。 这一章我们使用canvas来做一个画图工具,并且支持下载图片功能。
最终实现界面
最终实现界面如下,当然我这种手残党是画不出来,手动@陈冲老师画的:![](https://images2017.cnblogs.com/blog/708076/201711/708076-20171115102939171-1027295246.png)
画图工具实现的主要功能
1.画笔颜色和粗细点击选取2.橡皮擦
3.清除画布
4.下载图片
在实现主要功能之前,首先要放置canvas画布,实现在规定区域内随意画图的功能,实现的原理是获取鼠标点击之后的位置,利用鼠标的点击、移动事件来实现绘画。实现代码如下:
设置全局变量
var canvas = document.getElementById('canvas'); var cvs = canvas.getContext('2d'); var drawing =false;
Html代码:
<canvas id="canvas" width="800px" height="600px" style="border: 1px solid red;"></canvas>
Js代码:
window.onload = function(){ var penWeight = 0; //画笔粗细 var penColor = ''; //画笔颜色 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; } canvas.onmouseleave = function(){ cvs.closePath(); canvas.onmousemove = null; canvas.onmouseup = null; } } }
1画笔颜色和粗细点击选取
这里我分别从画笔颜色和画笔粗细中个选取一个作为例子来简述以下如何实现:从上边的代码中可以了解到控制画笔粗细和颜色的分别是penWeight和penColor,也就是说,我们可以通过修改这两个变量从而实现改变画笔属性的功能,代码如下:
Html代码:
<input type="button" value="粗" class="bold btn" onclick="checkpen(10)" /> <input type="button" value="红" class="red item" style="background-color: red;border: none;" onclick="changecolor('red')" />
Js代码:
function checkpen(width){ //设置笔的粗细 cvs.lineWidth = width; } function changecolor(pencolor){ //设置颜色 cvs.strokeStyle =pencolor; }
2橡皮擦
选中橡皮擦之后提示正在使用,利用鼠标移动,点击事件实现橡皮擦的功能,其中cvs.globalCompositeOperation = "destination-out"; 可以实现橡皮擦点击经过的地方显示原始背景色。代码实现如下:Html代码:
<input type="button" value="橡皮擦" class="eraser btn" id="eraser" onclick="checkeraser()" /> <input type="button" value="取消橡皮擦" class="uneraser btn" id="uneraser" onclick="canceleraser()" />
Js代码:
//选中橡皮擦 function checkeraser(){ document.getElementById("eraser").value = "正在使用..."; cvs.lineWidth = 20; cvs.globalCompositeOperation = "destination-out"; function getBoundingClientRect(x,y){ var box = canvas.getBoundingClientRect(); //获取canvas的距离浏览器视窗的上下左右距离 return {x:x-box.left, y:y-box.top } } canvas.onmousedown = function(e){ var first = getBoundingClientRect(e.clientX,e.clientY); cvs.save(); cvs.beginPath(); cvs.moveTo(first.x,first.y); drawing = true; } canvas.onmousemove = function(e){ if(drawing){ var move = getBoundingClientRect(e.clientX,e.clientY); cvs.save(); cvs.lineTo(move.x,move.y); cvs.stroke() cvs.restore() } } canvas.onmouseup = function(){ drawing = false; } canvas.onmouseleave = function(){ drawing = false; canvas.onmouseup(); } }
3清除画布
清空画布只需要调用clearRect() 方法,实现清空给定矩形内的指定像素。代码如下:Html代码:
<input type="button" value="清除画布" class="clear fun" onclick="clearb()" />
Js代码:
//清除画布功能 function clearb (){ cvs.clearRect(0,0,800,800); }
4下载图片
下载图片的部分代码和生成画布实现绘画的代码写在同一个方法中,一并贴出来了,可以自行删改。以下是实现代码:Html代码:
<input type="button" value="清除画布" class="clear fun" onclick="clearb()" />
Js代码:
//保存图片 window.onload = function(){ var penWeight = 0; //画笔粗细 var penColor = ''; //画笔颜色 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; } canvas.onmouseleave = function(){ cvs.closePath(); canvas.onmousemove = null; canvas.onmouseup = null; } } var dlButton = document.getElementById("downloadImageBtn"); bindButtonEvent(dlButton,"click",saveAsLocalImage) } function bindButtonEvent(element, type, handler) { if(element.addEventListener) { element.addEventListener(type, handler, false); } else { element.attachEvent('on'+type, handler); } } function saveAsLocalImage () { var myCanvas = document.getElementById("canvas"); var image = myCanvas.toDataURL("image/png").replace("image/png", "image/octet-stream"); window.location.href=image; }
如需源码,可戳右侧链接自行下载哦~http://www.jredu100.com/index.php?m=content&c=index&a=show&catid=65&id=39
作者:杰瑞教育
出处:http://www.cnblogs.com/jerehedu/
版权声明:本文版权归烟台杰瑞教育科技有限公司和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
技术咨询:
![](http://pub.idqqimg.com/wpa/images/group.png)
相关文章推荐
- html5 canvas 制作画图工具。
- 【HTML】【实践】使用Canvas制作网页小游戏
- 使用canvas制作刮刮卡效果(1)
- 使用VS 自带的打包工具,制作winform安装项目
- Mac OS平台下应用程序安装包制作工具Packages的使用介绍
- 使用HTML5新API制作图片转Base64编码工具
- 使用Java8提供的Duration类制作字幕时间轴调整工具
- 运用canvas制作简单的画图
- 画图工具使用gnuplot&graphviz
- Android画图工具——Canvas
- 使用crosstool-ng-1.19.0.tar.bz2制作mips32大端交叉编译工具
- 使用Canvas和Paint制作圆角矩形头像
- android下Path,Canvas,Paint画图工具类的使用-----很好的例子
- 教你使用免费的BMFont工具和Photoshop来制作纹理贴图和fnt文件
- 使用Setup Factory安装包制作工具制作安装包
- 一个截屏工具制作的全过程记录——如何使用“拿来主义”
- WPF InkCanvas 画图 基础使用教程
- Mac OS平台下应用程序安装包制作工具Packages的使用介绍(补充)
- 如何在TFrame中使用Canvas画图
- 使用SfntTool制作字体剪辑工具1 - 直接使用sfnttool.jar