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 autocomplete插件修改
Apr 17 Javascript
基于jquery可配置循环左右滚动例子
Sep 09 Javascript
JavaScript高级程序设计阅读笔记(十六) javascript检测浏览器和操作系统-detect.js
Aug 14 Javascript
JavaScript对象学习经验整理
Oct 12 Javascript
JS取request值以及自动执行使用示例
Feb 24 Javascript
Javascript模拟加速运动与减速运动代码分享
Dec 11 Javascript
jQuery跨域问题解决方案
Aug 03 Javascript
Node.js实现文件上传
Jul 05 Javascript
微信小程序之仿微信漂流瓶实例
Dec 09 Javascript
JS中Promise函数then的奥秘探究
Jul 30 Javascript
详解ES6中的Map与Set集合
Mar 22 Javascript
前端js中的事件循环eventloop机制详解
May 15 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中记录用户访问过的产品,在cookie记录产品id,id取得产品信息
2011/05/04 PHP
PHP数组遍历知识汇总(包含遍历方法、数组指针操作函数、数组遍历测速)
2014/07/05 PHP
PHP新特性详解之命名空间、性状与生成器
2017/07/18 PHP
动态样式类封装JS代码
2009/09/02 Javascript
javascript 模拟点击广告
2010/01/02 Javascript
javascript 得到变量类型的函数
2010/05/19 Javascript
Javascript中的this绑定介绍
2011/09/22 Javascript
关于JavaScript中string 的replace
2013/04/12 Javascript
jquery实现input输入框实时输入触发事件代码
2014/01/28 Javascript
轻松学习jQuery插件EasyUI EasyUI表单验证
2015/12/01 Javascript
jQuery动态添加及删除表单上传元素的方法(附demo源码下载)
2016/01/15 Javascript
聊聊JavaScript如何实现继承及特点
2017/04/07 Javascript
JQuery EasyUI的一些常用组件
2017/07/12 jQuery
vue展示dicom文件医疗系统的实现代码
2018/08/27 Javascript
微信小程序如何调用新闻接口实现列表循环
2019/07/02 Javascript
python中的reduce内建函数使用方法指南
2014/08/31 Python
Python实现给文件添加内容及得到文件信息的方法
2015/05/28 Python
Python中的左斜杠、右斜杠(正斜杠和反斜杠)
2016/08/30 Python
python selenium 弹出框处理的实现
2019/02/26 Python
Python高级property属性用法实例分析
2019/11/19 Python
Python Selenium实现无可视化界面过程解析
2020/08/25 Python
python中entry用法讲解
2020/12/04 Python
洲际酒店集团大中华区:IHG中国
2016/08/17 全球购物
英国在线发型和美容产品商店:Beauty Cutie
2019/04/27 全球购物
Perfume’s Club美国官网:西班牙第一家在线美容店
2020/06/10 全球购物
PHP开发工程师面试问题集锦
2012/11/01 面试题
大门门卫岗位职责
2013/11/30 职场文书
警察思想汇报
2014/01/04 职场文书
一名老师的自我评价
2014/02/07 职场文书
数控技校生自我鉴定
2014/04/19 职场文书
审计局班子四风对照检查材料思想汇报
2014/10/07 职场文书
六年级语文下册教学计划
2015/01/22 职场文书
教师辞职书范文
2015/02/26 职场文书
幼儿园园务工作总结2015
2015/05/18 职场文书
创业计划书之闲置物品置换中心
2019/12/25 职场文书
解决golang post文件时Content-Type出现的问题
2021/05/02 Golang