一个程序明白Javascript绘图
来源:互联网 发布:国二c语言题库 编辑:程序博客网 时间:2024/06/06 19:23
问题:一个页面中,不同方法间如何传递信息?此程序回答了这个问题
<!DOCTYPE html> <html> <head> <title>html5 绘图板 demo -- http://jslover.com</title> </head> <body> <canvas width="500" height="200"style="border:1px solid red"></canvas> <div> <input type="button" id="btn"value="清空" onclick="draw.clear()"/> <input type="button" id="Button1"value="重绘" onclick="draw.reDraw()"/> <input type="button" id="Button2"value="生成图片" onclick="draw.toPng()"/> </div> <script> //绘图板 function Drawbox(canvas) { this.canvas = canvas; this.context = this.canvas.getContext('2d'); //线条宽度 this.context.lineWidth = 2; //线条颜色 this.context.strokeStyle = '#555'; //线条圆角 this.context.lineCap = "round"; //状态 this.drawing = false; //历史记录 this.his = []; this.timeout_draw = 0; } Drawbox.prototype = { mousedown: function (e) { this.drawing = true; this.his.push({ x: e.layerX , y: e.layerY }); } , mouseup: function (e) { this.drawing = false; this.his.push({ x: e.layerX , y: e.layerY //是否中止,鼠标放开时,记录状态,防止“连笔” , end: 1 }); } , mousemove: function (e) { var _this = this; if (_this.drawing) { //将坐标不断存入历史记录 _this.his.push({ x: e.layerX , y: e.layerY }); _this.context.beginPath(); var l = _this.his.length; if (!_this.his[l - 1].end) { _this.context.moveTo(_this.his[l - 2].x, _this.his[l - 2].y); _this.context.lineTo(_this.his[l - 1].x, _this.his[l - 1].y); _this.context.stroke(); } } } , init: function () { var _this = this; _this.canvas.addEventListener('mousemove', function (e) { _this.mousemove(e) }, false); _this.canvas.addEventListener('mousedown', function (e) { _this.mousedown(e) }, false); _this.canvas.addEventListener('mouseup', function (e) { _this.mouseup(e) }, false); } //清空 , clear: function (noClearHis) { var _this = this; clearTimeout(_this.timeout_draw); //清空 _this.context.clearRect(0, 0, 3000, 3000); if (!noClearHis) { //清除历史记录 _this.his.length = 0; } } //重绘 , reDraw: function () { var _this = this; _this.clear(true); var i = 0; var length = _this.his.length; clearTimeout(_this.timeout_draw); if (length < 2) { return; } function draw() { if (!_this.his[i].end) { _this.context.moveTo(_this.his[i].x, _this.his[i].y); _this.context.lineTo(_this.his[i + 1].x, _this.his[i + 1].y); _this.context.stroke(); } _this.timeout_draw = setTimeout(function () { if (i < length - 1) { draw(); } }, 10); ++i; } draw(); } //导出PNG图片 , toPng: function () { var url = this.canvas.toDataURL(); if (document.getElementById("temp_img")) { document.getElementById("temp_img").src = url; } else { var img = document.createElement('img'); img.id = "temp_img"; img.src = url; document.body.appendChild(img); } } }; var draw = new Drawbox(document.getElementsByTagName('canvas')[0]); draw.init(); </script> <div> <br/> 原文地址:<a href="http://jslover.com/?p=360"title="一个简易的HTML5绘图板,带重绘功能">http://jslover.com/?p=360</a> </div> </body>
- 一个程序明白Javascript绘图
- 一个程序明白buddy算法
- 一个程序明白elf格式组成
- MFC 一个简单的绘图程序
- 一个简单的代码,讲明白javascript的线程
- 一个JavaScript演示程序
- JavaScript绘图
- javascript 绘图
- Javascript绘图javascript
- 一个JavaScript的倒计时程序
- 明白一个道理
- JavaScript绘图类 (DIV绘图)
- 以一个最简单的例子把OO的JavaScript说明白
- 以一个最简单的例子把OO的JavaScript说明白
- 用一个最简单的例子把OO的JavaScript说明白
- 以一个最简单的例子把OO的JavaScript说明白
- 以一个最简单的例子把OO的JavaScript说明白
- 以一个最简单的例子把OO的JavaScript说明白
- 模板类的默认模板参数、模板函数不支持默认模板参数
- Oracle 11gR2 RAC 常用维护操作 说明
- Phong shading(补色渲染)
- spring 整合struts2 action参数设置不上
- RGB和HSB转换
- 一个程序明白Javascript绘图
- hash表冲突解决方法
- ARM中断控制寄存器介绍(1)
- 一个经典的类似Photoshop的Javascript画板实现
- 最好的HTML 5编码教程和参考手册分享
- 13 学习 shell scripts
- VLC源码分析(二)
- babyos (三)——利用BIOS INT 0x13读取软盘
- Yii: 返回数据表中指定字段以及添加自定义字段值