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 相关文章推荐
js 浏览器事件介绍
Mar 30 Javascript
javascript中简单的进制转换代码实例
Oct 26 Javascript
jquery数组封装使用方法分享(jquery数组遍历)
Mar 25 Javascript
jquery实现公告翻滚效果
Feb 27 Javascript
javascript基础语法——全面理解变量和标识符
Jun 02 Javascript
五步轻松实现zTree的使用
Nov 01 Javascript
JavaScript事件委托原理与用法实例分析
Jun 07 Javascript
Vue2.0学习系列之项目上线的方法步骤(图文)
Sep 25 Javascript
mpvue+vuex搭建小程序详细教程(完整步骤)
Sep 30 Javascript
使用weixin-java-miniapp配置进行单个小程序的配置详解
Mar 29 Javascript
JS数组Reduce方法功能与用法实例详解
Apr 29 Javascript
vue3获取当前路由地址
Feb 18 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
PHP中动态HTML的输出技术
2006/10/09 PHP
PHP基础知识回顾
2012/08/16 PHP
PHP列出MySQL中所有数据库的方法
2015/03/12 PHP
PHP数据库连接mysql与mysqli对比分析
2016/01/04 PHP
详解Yii2.0使用AR联表查询实例
2017/06/16 PHP
PHP基于curl实现模拟微信浏览器打开微信链接的方法示例
2019/02/15 PHP
Jquery 的扩展方法总结
2011/10/01 Javascript
多种方式实现JS调用后台方法进行数据交互
2013/08/20 Javascript
jQuery 快速结束当前正在执行的动画
2013/11/20 Javascript
jQuery实现的选择商品飞入文本框动画效果完整实例
2016/08/10 Javascript
Bootstrapvalidator校验、校验清除重置的实现代码(推荐)
2016/09/28 Javascript
vue2.0 + element UI 中 el-table 数据导出Excel的方法
2018/03/02 Javascript
微信小程序结合mock.js实现后台模拟及调试
2019/03/28 Javascript
微信小程序实现的一键拨号功能示例
2019/04/24 Javascript
JavaScript实现移动端拖动元素
2020/11/24 Javascript
python爬取网站数据保存使用的方法
2013/11/20 Python
朴素贝叶斯算法的python实现方法
2014/11/18 Python
Python中__new__与__init__方法的区别详解
2015/05/04 Python
Python素数检测的方法
2015/05/11 Python
Python作用域用法实例详解
2016/03/15 Python
详解Python的collections模块中的deque双端队列结构
2016/07/07 Python
Python实现批量读取图片并存入mongodb数据库的方法示例
2018/04/02 Python
python使用phoenixdb操作hbase的方法示例
2019/02/28 Python
django迁移数据库错误问题解决
2019/07/29 Python
使用matlab 判断两个矩阵是否相等的实例
2020/05/11 Python
python基本算法之实现归并排序(Merge sort)
2020/09/01 Python
Python实现手势识别
2020/10/21 Python
Auchan Direct波兰:欧尚在线杂货店
2016/10/19 全球购物
Nike爱尔兰官方网站:Nike.com (IE)
2018/03/12 全球购物
LivingSocial英国:英国本地优惠
2019/02/22 全球购物
一套带答案的C++笔试题
2014/01/10 面试题
2014年初中班主任工作总结
2014/11/08 职场文书
法律进社区活动总结
2015/05/07 职场文书
2015年中秋放假通知范文
2015/08/18 职场文书
发言稿之优秀教师篇
2019/09/26 职场文书
教你用python实现12306余票查询
2021/06/30 Python