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 相关文章推荐
asp javascript 实现关闭窗口时保存数据的办法
Nov 24 Javascript
由JavaScript技术实现的web小游戏(不含网游)
Jun 12 Javascript
jQuery实现鼠标移到元素上动态提示消息框效果
Oct 20 Javascript
js中定义一个变量并判断其是否为空的方法
May 13 Javascript
js实现黑色简易的滑动门网页tab选项卡效果
Aug 31 Javascript
jQuery实现图片加载完成后改变图片大小的方法
Mar 29 Javascript
JQuery 传送中文乱码问题的简单解决办法
May 24 Javascript
js随机生成一个验证码
Jun 01 Javascript
详解VueJS 数据驱动和依赖追踪分析
Jul 26 Javascript
vue首次赋值不触发watch的解决方法
Sep 11 Javascript
JavaScript常用工具函数库汇总
Sep 17 Javascript
vue项目多环境配置(.env)的实现
Jul 21 Vue.js
基于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
水质对咖图啡风味的影响具体有哪些
2021/03/03 冲泡冲煮
收集的php编写大型网站问题集
2007/03/06 PHP
php简单静态页生成过程
2008/03/27 PHP
PHP下一个非常全面获取图象信息的函数
2008/11/20 PHP
PHPLog php 程序调试追踪工具
2009/09/09 PHP
php中is_null,empty,isset,unset 的区别详细介绍
2013/04/28 PHP
PHP json_encode中文乱码问题的解决办法
2013/09/09 PHP
PHP Try-catch 语句使用技巧
2016/02/28 PHP
PHP中empty,isset,is_null用法和区别
2017/02/19 PHP
Tab页界面,用jQuery及Ajax技术实现
2009/09/21 Javascript
在表单提交前进行验证的几种方式整理
2013/07/31 Javascript
jquery $.each 和for怎么跳出循环终止本次循环
2013/09/27 Javascript
jquery实现textarea 高度自适应
2015/03/11 Javascript
JavaScript基于setTimeout实现计数的方法
2015/05/08 Javascript
JS实现按比例缩放图片的方法(附C#版代码)
2015/12/08 Javascript
AngularJS ng-app 指令实例详解
2016/07/30 Javascript
详解JavaScript中的属性和特性
2016/12/08 Javascript
javascript解析ajax返回的xml和json格式数据实例详解
2017/01/05 Javascript
jQuery EasyUI Panel面板组件使用详解
2017/02/28 Javascript
基于iview-admin实现动态路由的示例代码
2019/10/02 Javascript
微信小程序select下拉框实现源码
2019/11/08 Javascript
vue仿淘宝滑动验证码功能(样式模仿)
2019/12/10 Javascript
[49:54]Ti4 循环赛第三日 LGD vs Titan
2014/07/12 DOTA
pytorch逐元素比较tensor大小实例
2020/01/03 Python
keras打印loss对权重的导数方式
2020/06/10 Python
纯css3实现图片翻牌特效
2015/03/10 HTML / CSS
魔幻般冒泡背景的CSS3按钮动画
2016/02/27 HTML / CSS
日本卡普空电视游戏软件公司官方购物网站:e-CAPCOM
2018/07/17 全球购物
运动会致辞稿50字
2014/02/04 职场文书
小学学习雷锋活动总结
2014/07/03 职场文书
单位授权委托书范文
2014/08/02 职场文书
教师节横幅标语
2014/10/08 职场文书
2014年政风行风自查自纠报告
2014/10/21 职场文书
2014年学生党支部工作总结
2014/12/20 职场文书
详解MySQL 联合查询优化机制
2021/05/10 MySQL
MySQL分布式恢复进阶
2022/07/23 MySQL