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 延迟加载 改变JS的位置加快网页加载速度
Dec 11 Javascript
js 日期比较相关天数代码
Apr 02 Javascript
JavaScript性能优化总结之加载与执行
Aug 11 Javascript
js图片加载效果实例代码(延迟加载+瀑布流加载)
May 12 Javascript
React-Native中props具体使用详解
Sep 04 Javascript
JavaScript实现获取select下拉框中第一个值的方法
Feb 06 Javascript
webpack将js打包后的map文件详解
Feb 22 Javascript
微信小程序仿微信运动步数排行(交互)
Jul 13 Javascript
jQuery实现的简单日历组件定义与用法示例
Dec 24 jQuery
深入了解JavaScript 私有化
May 30 Javascript
js实现石头剪刀布游戏
Oct 11 Javascript
ant-design-vue中的select选择器,对输入值的进行筛选操作
Oct 24 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
2.PHP入门
2006/10/09 PHP
我的论坛源代码(七)
2006/10/09 PHP
php常用字符串长度函数strlen()与mb_strlen()用法实例分析
2019/06/25 PHP
Tinymce+jQuery.Validation使用产生的BUG
2010/03/29 Javascript
用JQuery实现表格隔行变色和突出显示当前行的代码
2012/02/10 Javascript
js不能获取隐藏的div的宽度只能先显示后获取
2014/09/04 Javascript
深入理解JavaScript系列(50):Function模式(下篇)
2015/03/04 Javascript
AngularJs Scope详解及示例代码
2016/09/01 Javascript
各式各样的导航条效果css3结合jquery代码实现
2016/09/17 Javascript
AngularJS  双向数据绑定详解简单实例
2016/10/20 Javascript
使用bootstrap实现下拉框搜索功能的实例讲解
2018/08/10 Javascript
微信小程序下拉刷新PullDownRefresh的使用方法
2018/11/29 Javascript
express + jwt + postMan验证实现持久化登录
2019/06/05 Javascript
Vue.js实现备忘录功能
2019/06/26 Javascript
跟老齐学Python之传说中的函数编写条规
2014/10/11 Python
Python中用sleep()方法操作时间的教程
2015/05/22 Python
python实现下载文件的三种方法
2017/02/09 Python
python3实现TCP协议的简单服务器和客户端案例(分享)
2017/06/14 Python
python递归实现快速排序
2018/08/18 Python
Python八皇后问题解答过程详解
2019/07/29 Python
python 矢量数据转栅格数据代码实例
2019/09/30 Python
Django 解决开发自定义抛出异常的问题
2020/05/21 Python
python如何调用百度识图api
2020/09/29 Python
HTML5 对各个标签的定义与规定:body的介绍
2012/06/21 HTML / CSS
远程Wi-Fi宠物监控相机:Petcube
2017/04/26 全球购物
欧姆龙医疗保健与医疗产品:Omron Healthcare
2020/02/10 全球购物
高分子材料个人求职信范文
2013/09/25 职场文书
文员岗位职责
2013/11/09 职场文书
大专生自荐书范文
2014/06/22 职场文书
英语专业求职信
2014/07/08 职场文书
幼儿园六一活动总结
2014/08/27 职场文书
工程安全生产协议书
2014/11/21 职场文书
房屋租房协议书范本
2014/12/04 职场文书
销售合作意向书范本
2015/05/08 职场文书
某某幼儿园的教育教学管理调研分析报告
2019/11/29 职场文书
Android使用EventBus发送消息,Fragment中接收消息的方法会执行多次
2022/04/24 Java/Android