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 将disabled的元素置为enabled的三种方法
Jul 25 Javascript
jQuery timers计时器简单应用说明
Oct 28 Javascript
解决IE6的PNG透明JS插件使用介绍
Apr 17 Javascript
jQuery Form 页面表单提交的小例子
Nov 15 Javascript
使用jquery实现以post打开新窗口
Mar 19 Javascript
javascript数组去重方法汇总
Apr 23 Javascript
HTML5使用DeviceOrientation实现摇一摇功能
Jun 05 Javascript
BootStrap与Select2使用小结
Feb 17 Javascript
jquery.validate表单验证插件使用详解
Jun 21 jQuery
js精确的加减乘除实例
Nov 14 Javascript
了解JavaScript中let语句
May 30 Javascript
JavaScript实现简单的图片切换功能(实例代码)
Apr 10 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 静态变量的初始化
2009/11/15 PHP
php _autoload自动加载类与机制分析
2012/02/10 PHP
zend Framework中的Layout(模块化得布局)详解
2013/06/28 PHP
PHP5.0~5.6 各版本兼容性cURL文件上传功能实例分析
2018/05/11 PHP
php微信公众号开发之二级菜单
2018/10/20 PHP
php 根据URL下载远程图片、压缩包、pdf等文件到本地
2019/07/26 PHP
Yii框架中用response保存cookie,用request读取cookie的原理解析
2019/09/04 PHP
将字符串转换成gb2312或者utf-8编码的参数(js版)
2013/04/10 Javascript
分享一个自己动手写的jQuery分页插件
2014/08/28 Javascript
javascript中bind函数的作用实例介绍
2014/09/28 Javascript
Javascript学习笔记之函数篇(六) : 作用域与命名空间
2014/11/23 Javascript
在JavaScript中如何解决用execCommand(
2015/10/19 Javascript
AngularJS入门教程之REST和定制服务详解
2016/08/19 Javascript
JavaScript注入漏洞的原理及防范(详解)
2016/12/04 Javascript
vue.config.js常用配置详解
2019/11/14 Javascript
JavaScript实现放大镜效果代码示例
2020/04/29 Javascript
解决vue axios跨域 Request Method: OPTIONS问题(预检请求)
2020/08/14 Javascript
[49:07]VGJ.T vs Optic Supermajor小组赛D组 BO3 第二场 6.3
2018/06/04 DOTA
使用Python的Supervisor进行进程监控以及自动启动
2014/05/29 Python
跟老齐学Python之数据类型总结
2014/09/24 Python
在Python中用split()方法分割字符串的使用介绍
2015/05/20 Python
windows系统下Python环境搭建教程
2017/03/28 Python
BP神经网络原理及Python实现代码
2018/12/18 Python
Python Pandas 转换unix时间戳方式
2019/12/07 Python
Python实现剪刀石头布小游戏(与电脑对战)
2019/12/31 Python
python 使用递归实现打印一个数字的每一位示例
2020/02/27 Python
keras自动编码器实现系列之卷积自动编码器操作
2020/07/03 Python
css3学习之2D转换功能详解
2016/12/23 HTML / CSS
泰国汽车、火车和轮渡票预订网站:Bus Online Ticket
2017/09/09 全球购物
Myprotein丹麦官网:欧洲第一运动营养品牌
2019/04/15 全球购物
参观监狱心得体会
2014/01/02 职场文书
上班早退检讨书
2014/01/09 职场文书
违纪检讨书2000字
2014/02/08 职场文书
大学社团活动总结
2014/04/26 职场文书
国贸专业毕业求职信
2014/06/11 职场文书
公司酒会主持词
2015/07/02 职场文书