试用支持canvas的浏览器,无JS依赖,运用新的HTML5技术
DrawBoard.renderDrawer(‘myHandWrite‘,{
penColor:‘#FF0000‘,
penWidth:‘1px‘
});
仅一段代码就可渲染出整个绘图板
?1. [文件] Drawer.js
/**
* @class Canvas DrawBoard
* @author Jason <[email protected]>
* @version 1.1
* @singleton
* @fileoverview
* Build Date:2014/04/12
* The application is valid in a browser that supports HTML5 canvas object.
* A default canvas tag will render to the div you have appointed
* You can use this application like this:
* DrawBoard.renderDrawer(‘myHandWrite‘,{
* penColor:‘#FF0000‘,
* penWidth:‘1px‘
* });
* If you need a text background,this will help:
* DrawBoard.formatText(‘Sign here‘);
* See {@link DrawBoard.renderDrawer} for more details
*/
var DrawBoard/*DrawBoard对象*/={};
DrawBoard.Id="";
DrawBoard.penColor="#FF0000";
DrawBoard.penWidth=0;
DrawBoard.mouseX/*鼠标位置X*/=0;
DrawBoard.mouseY/*鼠标位置Y*/=0;
DrawBoard.isMouseDown/**/=false;
DrawBoard.isMouseMove/**/=false;
DrawBoard.mousePath/**/=new Array();
DrawBoard.mousePosition/**/={x:0,y:0};
DrawBoard.Events/*事件列表*/={
onMouseMove/*鼠标移动*/:function(e){
var me=DrawBoard;
var ctx=me.Context;
var canvas=me.Canvas;
if(me.isMouseDown){
if(me.isMouseMove){
ctx.moveTo(me.mouseX,me.mouseY);
me.isMouseMove=false;
}
me.mouseX= e.layerX;
me.mouseY= e.layerY+32;
me.mousePosition={"x":me.mouseX,"y":me.mouseY};
me.mousePath.push(me.mousePosition);
ctx.lineTo(me.mouseX, me.mouseY);
ctx.stroke();
}
},
onMouseDown/*鼠标按下*/:function(e){
var me=DrawBoard;
var ctx=me.Context;
var canvas=me.Canvas;
canvas.style.borderColor="#808080";
var rect=canvas.getBoundingClientRect();
me.isMouseDown=true;
me.isMouseMove=true;
//计算鼠标位置 仅适用fireFox
me.mouseX= e.layerX;
me.mouseY= e.layerY+32;
if(me.mousePath.length==0){
me.redo();
}
},
onMouseOut/*鼠标移出*/:function(e){
var me=DrawBoard;
me.isMouseDown=false;
},
onMouseUp/*鼠标放开*/:function(e){
var me=DrawBoard;
var ctx=me.Context;
var canvas=me.Canvas;
canvas.style.borderColor="#C0C0C0";
me.isMouseDown=false;
}
};
/**
* Render a child element to the node that has a id attribute which values @param id
* @param {String} id the name that canvas will render as it‘s child element
* @param {Object} option the pen color
* @argument {String} penColor rgb(0,0,0) or #000000 color
* @argument {String} penWidth pen width in pixel
* @argument {Int} width canvas board width
* @argument {Int} height canvas board height
*/
DrawBoard.renderDrawer/*渲染绘图对象*/=function(id,option){
var me=DrawBoard;
var p=option;
me.Id=id;
me.penColor=p.penColor||me.penColor;
me.penWidth= p.penWidth;
var objContainer=document.getElementById(id);
//初始化Canvas元素
var objCanvas=document.getElementById(‘DrawBoard‘)||document.createElement(‘canvas‘);
with(objCanvas){
width= p.width||720;
height= p.height||400;
id=‘DrawBoard‘;
style.margin=‘auto‘;
style.border="1px solid #C0C0C0";
style.borderRadius="4px";
style.position="absolute";
style.cursor="url(images/site/pencil.gif),auto";
}
objContainer.appendChild(objCanvas);
var ctx=objCanvas.getContext(‘2d‘);
//初始化canvas上下文对象
with(ctx){
lineWidth/*线宽*/=me.penWidth;
strokeStyle/*描绘颜色*/=me.penColor;
fillStyle/*填充颜色*/=me.penColor;
lineCap/*线头样式*/="round";
lineJoin/*转角样式*/="round";
miterLimit/*折角锐利度*/=1;
shadowColor=‘#FC0000‘;
shadowBlur=1;
}
//为Canvas元素附加事件
objCanvas.addEventListener("mousemove",me.Events.onMouseMove,false);
objCanvas.addEventListener("mouseout",me.Events.onMouseOut,false);
objCanvas.addEventListener("mouseup",me.Events.onMouseUp,false);
objCanvas.addEventListener("mousedown",me.Events.onMouseDown,false);
objCanvas.addEventListener("contextmenu",DrawBoard.redo,false);
//赋值对象http://www.huiyi8.com/hunsha/hanshi/?
me.Canvas=me.Canvas||objCanvas;
me.Context=me.Context||ctx;
}韩式婚纱照片
DrawBoard.redo/*清空所有窗体*/=function(){
var me=DrawBoard;
var canvas=me.Canvas;
var ctx=me.Context;
ctx.clearRect(0,0,canvas.width,canvas.height);
canvas.width=canvas.width;
//置空鼠标路径数组
me.mousePath.splice(0,me.mousePath.length);
me.renderDrawer(me.Id,me.penColor,me.penWidth);
};
DrawBoard.formatText/*绘制一个水印*/=function(text){
var me=DrawBoard;
var canvas=me.Canvas;
var ctx=me.Context;
ctx.font/*字体*/="100px 宋体";
ctx.fillText(text,100,200);
ctx.stroke();
};
//取png数据类型
DrawBoard.getImage=function(){
return DrawBoard.Context!=null?DrawBoard.Canvas.toDataURL(‘image/png‘):"";
}
DrawBoard.download=function(){
}
/**
* POST you data to the server
* @param option
* @argument {String} method ‘POST‘ or ‘GET‘ is valid
* @argument {String} url the address to post to
* @argument {String} isDirect if true to use a asynchronous method,or false to not use
* @argument {Function} onSuccess the method to be called upon the success of the request
*/
DrawBoard.post=function(option){
var p=option;
var request=new XMLHttpRequest()||window.ActiveXObject("Microsoft.XMLHttp");
request.onreadystatechange=function(){
if(request.readyState==4){
if(request.status==200){
eval(option.onSuccess);
}else{
}
}else{
}
};
request.open(p.method||‘POST‘, p.url, p.isDirect||true);
request.send(p.params)
}
?
html5 手写的canvas实现
时间: 2024-10-08 03:59:42
html5 手写的canvas实现的相关文章
html5手写签名
<!DOCTYPE html> <html> <head> <meta charset="utf-8" /> <meta content="width=device-width,initial-scale=1,maximum-scale=1" name="viewport" /> <title>sxqm</title> <meta name="fo
wex5 实战 手写签名与上传
之前做过一个物流演示模块,有一个功能没做完,就是收件人收货后,可以手写签名并上传,替代传统纸张的签名.今天终于做完了. 一 效果演示: 后台图片上传成功 二 设计思路: 运用canvas插件jq-signature,制作手写签名,并通过二进制流方式上传图片 三 代码实现: 1 .下载引入插件jq-signature 手写签名插件,网上有很多,经过多种插件的逐步尝试,只有插件jq-signature达到了我想要的效果; 原因有二:1,支持手机触摸,web,鼠标.其它有的不支持手机触摸. 2,直接转
简单的神经网络算法-手写数字识别
本文通过BP神经网络实现一个简单的手写识别系统. 一.基础知识 1环境 python2.7 需要numpy等库 可利用sudo apt-get install python-安装 2神经网络原理 http://www.hankcs.com/ml/back-propagation-neural-network.html 讲的特别清楚,本实验过程中涉及矩阵运算都用numpy库的函数 3.js的基础知识 http://www.w3school.com.cn/tags/html_ref_canvas.a
HTML5新增核心工具——canvas
Canvas元素称得上是HTML5的核心所在,它是一个依靠JavaScript绘制华丽图像的元素. Canvas由一个可绘制地区HTML代码中的属性定义决定高度和宽度,JavaScript代码可以访问该地区,通过一套完整的绘图功能类似于其他通用二维的API,从而生成动态的图形. Canvas可以在浏览器中绘制出十分华丽的图形,比如: 当然这应该算比较高级的用法了,本菜也不会=.= Canvas一个很大的作用就是制作游戏,本文通过博主之前做的一个小游戏来从零介绍Canvas的用法,先展示下吧: O
HTML5 CSS3 专题 :canvas 实现彩票刮刮乐
转载请标明出处:http://blog.csdn.net/lmj623565791/article/details/34089553 今天给大家带来一个刮刮乐的小例子~基于HTML5 canvas的,有兴趣的可以改成android版本的,或者其他的~ 效果图: 贴一张我中500w的照片,咋办啊,怎么花呢~ 好了,下面开始原理: 1.刮奖区域两个Canvas,一个是front , 一个back ,front遮盖住下面的canvas. 2.canvas默认填充了一个矩形,将下面canvas效果图遮盖
提高Android应用手写流畅度(基础篇)
在使用android类的手写应用时,整体上都有这样一个印象:android的手写不流畅.不自然,和苹果应用比起来相差太远.本文结合作者亲身经历,介绍一下有效提高手写流畅度的几种方法: 1.未做任何处理的手写效果: 这是一个自定义的view,通过在onTouchEvent时间中捕获系统回调的触摸点信息,然后再onDraw方法里面刷新,可以明显地感觉到线条很生硬,并且在手写的过程中跟随感很差,反应迟钝,具体代码如下: package com.mingy.paint.view; import andr
android项目 之 记事本(6)----- 添加手写
想必大家都用过QQ的白板功能,里面主要有两项,一个是涂鸦功能,其实类似于上节的画板功能,而另一个就是手写,那记事本怎么能没有这个功能呢,今天就来为我们的记事本添加手写功能. 先上图,看看效果: 看了效果图,是不是心动了呢?那就赶紧着手做吧,其实,手写功能并不难实现,大体就是全屏书写,定时发送handle消息,更新activity. 实现手写功能的主要步骤: 1. 自定义两个View,一个是TouchView,用于在上面画图,另一个是EditText,用于将手写的字显示在其中,并且,要将两个自定义
HTML5 file API加canvas实现图片前端JS压缩并上传 (转载)
一.图片上传前端压缩的现实意义 对于大尺寸图片的上传,在前端进行压缩除了省流量外,最大的意义是极大的提高了用户体验. 这种体验包括两方面: 由于上传图片尺寸比较小,因此上传速度会比较快,交互会更加流畅,同时大大降低了网络异常导致上传失败风险. 最最重要的体验改进点:省略了图片的再加工成本.很多网站的图片上传功能都会对图片的大小进行限制,尤其是头像上传,限制5M或者2M以内是非常常见的.然后现在的数码设备拍摄功能都非常出众,一张原始图片超过2M几乎是标配,此时如果用户想把手机或相机中的某个得意图片
android手写笔思路
工作需要,对这方面做了一些了解 一般的手写对android canvas有点理解的应该都知道,只需要单纯的使用drawPath就可以在view上画画. 而手写笔的关键则是要让path的strokeWidth发生变化 这个令人头大了, 毕竟setPaint只能够设置一个paint,一旦改变paint的参数,整个path都会发生改变. 所以,我们只能够另辟蹊径. 我们可以先开一个arraylist(Point),用来记录我们在surfaceview(推荐在画画功能上使用surfaceview代替vi