javaScript canvas实现(画笔大小 颜色 橡皮的实例)


Posted in Javascript onNovember 28, 2017

实例如下所示:

<!DOCTYPE html>
<html>
 <head>
 <meta charset="utf-8" />
 <title></title>
 </head>
 <body>
 <div>
 <div>
 
 <!--<input type="button" id="open" value="open"></input>
 <input type="button" id= "save" value = "save"></input> <input type="button" id= "color" value="color"></input> -->
 <input type="button" value="size"></input>
 <input type="text" id="size" onchange="sizeChange()"></input>
 <input type="button" id="clear" value="clear"></input>
 <input type="button" id="eraser" value="eraser" onclick="doEraser()"></input>
 <select id = "shape" onchange="shapeChange()">
  <option value = "99">shape</option>
  <option value = "1">rectangle</option>
  <option value = "0">circle</option>
  <option value = "2">line</option>
 </select>

 
 <input id="color" type="color"/>
 </div>
 <canvas id="myCanvas" style=" border:1px solid;" width="800" height="500"></canvas>
 </div>
 </body>
 <script language="JavaScript">
 var shap = 99; //0 is circle; 1 is rectangle
 var orignalX, orignalY;//the coordinate of mouse down
 var lastX, lastY;//the coordinate of last mouse position
 var isMouseDown = false; // flag of mouse pressing down
 var myCanvas = document.getElementById("myCanvas");
 var context = myCanvas.getContext('2d');
 var width = myCanvas.width, height = myCanvas.height;
 var data;//storing last canvas' content
 context.strokeStyle = "black";
 context.strokeWidth=1;
 context.lineWidth = 1;

 
 document.getElementById('color').onchange = function(){
   context.strokeStyle = this.value
 };
 
 function doEraser(){
 context.strokeStyle = "white";
 shap = 2;
 }
 function sizeChange(){
 
 context.lineWidth = parseInt(document.getElementById('size').value);
 
 }
 
 function shapeChange(){
 context.strokeStyle = "black";
  var myselect = document.getElementById("shape");
 var index=myselect.selectedIndex ; 
 var myvalue = myselect.options[index].value;
 var mytext=myselect.options[index].text; 
 shap = parseInt(myvalue);
 
  }

 

 function myCanvasMouseDown(event) {
 //event.preventDefault();
 
 if(event.button == 0) {
 orignalX = event.offsetX;
 orignalY = event.offsetY;
 context.moveTo(orignalX,orignalY); 
 data = context.getImageData(0, 0, width, height);
 isMouseDown = true;
 
 }
 }

 function myCanvasMouseMove(event) {
 if (isMouseDown){
 //event.preventDefault();
 
 switch(shap){
  case 0:
   context.clearRect(0,0,width,height);
  context.putImageData(data,0,0);
  lastX = event.offsetX;
  lastY = event.offsetY;
  context.beginPath();
  context.arc(orignalX+(lastX-orignalX)/2,orignalY+(lastY-orignalY)/2,Math.abs(lastX-orignalX)/2,0,Math.PI * 2,true);
  context.stroke();
  context.closePath();
  break;
  case 1:
  context.clearRect(0,0,width,height);
  context.putImageData(data,0,0);
  lastX = event.offsetX;
  lastY = event.offsetY;
  context.strokeRect(orignalX, orignalY, lastX-orignalX, lastY-orignalY);
  break;
  case 2:
   lastX = event.offsetX;
   lastY = event.offsetY;
   context.lineTo(lastX, lastY); //根据鼠标路径绘画 
   context.stroke(); //立即渲染 
   break;
  
 }
 }
 }

 function myCanvasMouseUp(event) {
 if (isMouseDown){
 //event.preventDefault();
 
 context.clearRect(0,0,width,height);
 context.putImageData(data,0,0);
 lastX = event.offsetX;
 lastY = event.offsetY;
 switch(shap){
  case 0:
  context.beginPath();
  context.arc(orignalX+(lastX-orignalX)/2,orignalY+(lastY-orignalY)/2,Math.abs(lastX-orignalX)/2,0,Math.PI * 2,true);
  context.stroke();
  context.closePath();
  break;
  case 1:
  context.beginPath();
  context.strokeRect(orignalX, orignalY, lastX-orignalX, lastY-orignalY);
  context.closePath();
  break;
  case 2:
  
  context.lineTo(lastX, lastY); //根据鼠标路径绘画 
   context.stroke(); //立即渲染 
  
  break;
 }
 isMouseDown = false;
 lastX = null;
 lastY = null;
 orignalX = null;
 orignalY = null;
 data = context.getImageData(0, 0, width, height);
 context.beginPath();
 context.clearRect(0,0,width,height);
 context.putImageData(data,0,0);
 context.closePath();
 }
 } 
 myCanvas.addEventListener("mousedown", myCanvasMouseDown, false);
 myCanvas.addEventListener("mousemove", myCanvasMouseMove, false);
 myCanvas.addEventListener("mouseup", myCanvasMouseUp, false);
 </script>
 
</html>

以上这篇javaScript canvas实现(画笔大小 颜色 橡皮的实例)就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
Jquery 滑入滑出效果实现代码
Mar 27 Javascript
Javascript控制页面链接在新窗口打开具体方法
Aug 16 Javascript
javascript中对变量类型的判断方法
Aug 09 Javascript
javascript实现表单验证
Jan 29 Javascript
使用 bootstrap modal遇到的问题小结
Nov 09 Javascript
jQuery实现圣诞节礼物动画案例解析
Dec 25 Javascript
js 实现复选框只能选择一项的示例代码
Jan 23 Javascript
小程序日历控件使用方法详解
Dec 29 Javascript
微信小程序实现获取小程序码和二维码java接口开发
Mar 29 Javascript
在vue-cli创建的项目中使用sass操作
Aug 10 Javascript
vue 如何从单页应用改造成多页应用
Oct 23 Javascript
vue router返回到指定的路由的场景分析
Nov 10 Javascript
基于Vue框架vux组件库实现上拉刷新功能
Nov 28 #Javascript
JavaScript中关于class的调用方法
Nov 28 #Javascript
基于vue+canvas的excel-like组件实例详解
Nov 28 #Javascript
JS原型继承四步曲及原型继承图一览
Nov 28 #Javascript
weebox弹出窗口不居中显示的解决方法
Nov 27 #Javascript
Dropify.js图片宽高自适应的方法
Nov 27 #Javascript
jfinal与bootstrap的登出实战详解
Nov 27 #Javascript
You might like
在php中使用sockets:从新闻组中获取文章
2006/10/09 PHP
PHP+AJAX实现无刷新注册(带用户名实时检测)
2007/01/02 PHP
PHP中通过trigger_error触发PHP错误示例
2015/06/23 PHP
windows平台中配置nginx+php环境
2015/12/06 PHP
轻松实现php文件上传功能
2017/02/17 PHP
用javascript连接access数据库的方法
2006/11/17 Javascript
滚动条变色 隐藏滚动条与双击网页自动滚屏显示代码
2009/12/28 Javascript
JavaScript对内存分配及管理机制详细解析
2013/11/11 Javascript
js中哈希表的几种用法总结
2014/01/28 Javascript
js读取配置文件自写
2014/02/11 Javascript
jQuery监控文本框事件并作相应处理的方法
2015/04/16 Javascript
Jquery 自定义事件实现发布/订阅的简单实例
2016/06/12 Javascript
使用Javascript监控前端相关数据的代码
2016/10/27 Javascript
Bootstrap CSS布局之列表
2016/12/15 Javascript
基于javascript实现数字英文验证码
2017/01/25 Javascript
NodeJS、NPM安装配置步骤(windows版本) 以及环境变量详解
2017/05/13 NodeJs
浅谈如何使用webpack构建多页面应用
2018/05/30 Javascript
小程序多图列表实现性能优化的方法步骤
2019/05/28 Javascript
Vue + Element UI图片上传控件使用详解
2019/08/20 Javascript
Python文件右键找不到IDLE打开项解决办法
2015/06/08 Python
使用pandas批量处理矢量化字符串的实例讲解
2018/07/10 Python
Flask框架使用DBUtils模块连接数据库操作示例
2018/07/20 Python
使用Python 正则匹配两个特定字符之间的字符方法
2018/12/24 Python
浅谈Scrapy网络爬虫框架的工作原理和数据采集
2019/02/07 Python
python批量修改图片尺寸,并保存指定路径的实现方法
2019/07/04 Python
python如何使用socketserver模块实现并发聊天
2019/12/14 Python
Python参数传递实现过程及原理详解
2020/05/14 Python
python else语句在循环中的运用详解
2020/07/06 Python
Clearly澳大利亚:购买眼镜、太阳镜和隐形眼镜
2018/04/26 全球购物
node中使用shell脚本的方法步骤
2021/03/23 Javascript
项目委托协议书(最新)
2014/09/13 职场文书
党员先进性教育整改措施
2014/09/18 职场文书
党的群众路线教育实践活动个人对照检查材料范文
2014/09/25 职场文书
2015年见习期工作总结
2014/12/12 职场文书
CAD实训总结范文
2015/08/03 职场文书
在python中实现导入一个需要传参的模块
2021/05/12 Python