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 相关文章推荐
javascript与asp.net(c#)互相调用方法
Dec 13 Javascript
JavaScript 数组循环引起的思考
Jan 01 Javascript
JavaScript中:表达式和语句的区别[译]
Sep 17 Javascript
js中如何复制一个对象并获取其所有属性和属性对应的值
Oct 24 Javascript
浅析js预加载/延迟加载
Sep 25 Javascript
js插件YprogressBar实现漂亮的进度条效果
Apr 20 Javascript
javascript动画系列之模拟滚动条
Dec 13 Javascript
如何实现星星评价(jquery.raty.js插件)
Dec 21 Javascript
JavaScript函数定义方法实例详解
Mar 05 Javascript
在vue中根据光标的显示与消失实现下拉列表
Sep 29 Javascript
Vue中jsx不完全应用指南小结
Nov 01 Javascript
node解析修改nginx配置文件操作实例分析
Nov 06 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
攻克CakePHP系列二 表单数据显示
2008/10/22 PHP
php is_file 判断给定文件名是否为一个正常的文件
2010/05/10 PHP
php 创建以UNIX时间戳命名的文件夹(示例代码)
2014/03/08 PHP
php实现telnet功能示例
2014/04/08 PHP
利用PHP将图片转换成base64编码的实现方法
2016/09/13 PHP
PHP异常处理定义与使用方法分析
2017/07/25 PHP
JavaScript获取文本框内选中文本的方法
2015/02/20 Javascript
jquery拖拽效果完整实例(附demo源码下载)
2016/01/14 Javascript
AngularJs  E2E Testing 详解
2016/09/02 Javascript
vue-router配合ElementUI实现导航的实例
2018/02/11 Javascript
axios拦截设置和错误处理方法
2018/03/05 Javascript
JavaScript作用域、闭包、对象与原型链概念及用法实例总结
2018/08/20 Javascript
简单两步使用node发送qq邮件的方法
2019/03/01 Javascript
vue 父组件给子组件传值子组件给父组件传值的实例代码
2019/04/15 Javascript
Vue编写可显示周和月模式的日历 Vue自定义日历内容的显示
2019/06/26 Javascript
node.js文件操作系统实例详解
2019/11/05 Javascript
vue-dplayer 视频播放器实例代码
2019/11/08 Javascript
Javascript如何实现双指控制图片功能
2020/02/25 Javascript
VUE 单页面使用 echart 窗口变化时的用法
2020/07/30 Javascript
如何在Express4.x中愉快地使用async的方法
2020/11/18 Javascript
django xadmin 管理器常用显示设置方式
2020/03/11 Python
python 判断txt每行内容中是否包含子串并重新写入保存的实例
2020/03/12 Python
使用ITK-SNAP进行抠图操作并保存mask的实例
2020/07/01 Python
Christys’ Hats官网:英国帽子制造商
2018/11/28 全球购物
Bibloo荷兰:女士、男士和儿童的服装、鞋子和配饰
2019/02/25 全球购物
门卫工作岗位职责
2013/12/17 职场文书
无犯罪记录证明
2014/09/19 职场文书
教师批评与自我批评范文
2014/10/15 职场文书
2014年大学学生会工作总结
2014/12/02 职场文书
离婚协议书怎么写
2015/01/26 职场文书
股权投资协议书
2016/03/23 职场文书
教你怎么用Python操作MySql数据库
2021/05/31 Python
教你怎么用Python selenium操作浏览器对象的基础API
2021/06/23 Python
深入解读Java三大集合之map list set的用法
2021/11/11 Java/Android
Node.js实现爬取网站图片的示例代码
2022/04/04 NodeJs
设置IIS Express并发数
2022/07/07 Servers