BBYR Achieve
返回信息流
这是一条镜像帖。来源:北邮人论坛 / www-technology / #28571同步于 2014/12/11
该镜像源已超过 30 天没有更新,可能在源站已被删除。
WWWTechnology机器人发帖

小白求问关于canvas。。。

airfan
2014/12/11镜像同步47 回复
我邮的大牛啊,小白又来召唤你们的帮助了。[ema1] 有木有用人canvas,能帮我看看我这个为什么画不了图吗。。。。。。谢谢大神们了。 <!doctype html> <html lang="zh-cn"> <head> <meta charset="utf-8"> <meta content="text/html; charset=utf-8" http-equiv="Content-Type" /> <title>Javascript canvas画图实例</title> <style> *{margin:0;padding:0;} .fa{width:740px;margin:0 auto;} .top{margin:20px 0;} .top input{width:25px;height:25px;border:1px solid #fff;border-radius:4px;background:#ddd;} .top .i1{background:#000000;} .top .i2{background:#FF0000;} .top .i3{background:#80FF00;} .top .i4{background:#00FFFF;} .top .i5{background:#808080;} .top .i6{background:#FF8000;} .top .i7{background:#408080;} .top .i8{background:#8000FF;} .top .i9{background:#CCCC00;} #canvas{background:#eee;cursor:default;} .font input{font-size:14px;} .top .grea{background:#aaa;} </style> </head> <body> <div class="fa"> <div class="top"> <div id="color"> 请选择画笔颜色: <input class="i1" type="button" value="" /> <input class="i2" type="button" value="" /> <input class="i3" type="button" value="" /> <input class="i4" type="button" value="" /> <input class="i5" type="button" value="" /> <input class="i6" type="button" value="" /> <input class="i7" type="button" value="" /> <input class="i8" type="button" value="" /> <input class="i9" type="button" value="" /> </div> <div class="font" id="font"> 请选择画笔的宽度: <input type="button" value="细" /> <input type="button" value="中" class="grea"/> <input type="button" value="粗" /> </div> <div> <span id="error">如果有错误,请使用橡皮擦:</span> <input id="eraser" style="width:60px;font-size:14px;"type="button" value="橡皮擦" /> </div> <input id="clear" type="button" value="清除画布" style="width:80px;"/> <input id="revocation" type="button" value="撤销" style="width:80px;"/> <input id="imgurl" type="button" value="导出图片路径" style="width:80px;"/> </div> <canvas id="canvas" width="740" height="420">您的浏览器不支持 canvas 标签</canvas> <div id="div1"></div> </div> <div id="html"> </div> <script> (function(){ var paint={ init:function() { this.load(); }, load:function() { this.x=[];//记录鼠标移动是的X坐标 this.y=[];//记录鼠标移动是的Y坐标 this.x.push(touch.target.offsetLeft); this.x.push(touch.target.offsetTop); this.isEraser=false; //this.Timer=null;//橡皮擦启动计时器 //this.radius=5; this.storageColor="#000000"; this.eraserRadius=15;//擦除半径值 this.color=["#000000","#FF0000","#80FF00","#00FFFF","#808080","#FF8000","#408080","#8000FF","#CCCC00"];//画笔颜色值 this.fontWeight=[2,5,8]; this.$=function(id){return typeof id=="string"?document.getElementById(id):id;}; this.canvas=this.$("canvas"); if (this.canvas.getContext) { } else { alert("您的浏览器不支持 canvas 标签"); return; } this.cxt=this.canvas.getContext('2d'); this.cxt.lineJoin = "round";//context.lineJoin - 指定两条线段的连接方式 this.cxt.lineWidth = 5;//线条的宽度 this.iptClear=this.$("clear"); this.revocation=this.$("revocation"); this.imgurl=this.$("imgurl");//图片路径按钮 this.w=this.canvas.width;//取画布的宽 this.h=this.canvas.height;//取画布的高 this.touch =("createTouch" in document);//判定是否为手持设备 this.StartEvent = this.touch ? "touchstart" : "mousedown";//支持触摸式使用相应的事件替代 this.MoveEvent = this.touch ? "touchmove" : "mousemove"; this.EndEvent = this.touch ? "touchend" : "mouseup"; this.bind(); }, bind:function() { var t=this; /*清除画布*/ this.iptClear.onclick=function() { t.clear(); }; /*鼠标按下事件,记录鼠标位置,并绘制,解锁lock,打开mousemove事件*/ this.canvas['on'+t.StartEvent]=function(e) { var touch=t.touch ? e.touches[0] : e; var _x=touch.clientX - touch.target.offsetLeft;//鼠标在画布上的x坐标,以画布左上角为起点 var _y=touch.clientY - touch.target.offsetTop;//鼠标在画布上的y坐标,以画布左上角为起点 if(t.isEraser) { t.resetEraser(_x,_y,touch); }else { this.x.push(_x); this.y.push(_y); } t.lock=true; }; this.canvas['on'+t.EndEvent]=function(e)//鼠标撒开事件 { this.cxt.beginPath(); this.cxt.moveTo(0,0); this.cxt.lineTo(120, 120); this.cxt.closePath(); this.cxt.stroke(); }; this.revocation.onclick=function()//对于撤销的处理 { t.redraw(); }; this.changeColor(); this.imgurl.onclick=function() { t.getUrl(); }; /*橡皮擦*/ this.$("eraser").onclick=function(e) { t.isEraser=true; t.$("error").style.color="red"; t.$("error").innerHTML="您已使用橡皮擦!"; }; }, clear:function() { this.cxt.clearRect(0, 0, this.w, this.h);//清除画布,左上角为起点 }, redraw:function() { /*撤销*/ this.cxt.restore(); }, preventDefault:function(e){ /*阻止默认*/ var touch=this.touch ? e.touches[0] : e; if(this.touch)touch.preventDefault(); else window.event.returnValue = false; }, changeColor:function() { /*为按钮添加事件*/ var t=this,iptNum=this.$("color").getElementsByTagName("input"),fontIptNum=this.$("font").getElementsByTagName("input"); for(var i=0,l=iptNum.length;i<l;i++) { iptNum[i].index=i; iptNum[i].onclick=function() { t.cxt.save(); t.cxt.strokeStyle = t.color[this.index]; t.storageColor=t.color[this.index]; t.$("error").style.color="#000"; t.$("error").innerHTML="如果有错误,请使用橡皮擦:"; t.cxt.strokeStyle = t.storageColor; t.isEraser=false; } } for(var i=0,l=fontIptNum.length;i<l;i++) { t.cxt.save(); fontIptNum[i].index=i; fontIptNum[i].onclick=function() { t.changeBackground(this.index); t.cxt.lineWidth = t.fontWeight[this.index]; t.$("error").style.color="#000"; t.$("error").innerHTML="如果有错误,请使用橡皮擦:"; t.isEraser=false; t.cxt.strokeStyle = t.storageColor; } } }, changeBackground:function(num) { /*添加画笔粗细的提示背景颜色切换,灰色为当前*/ var fontIptNum=this.$("font").getElementsByTagName("input"); for(var j=0,m=fontIptNum.length;j<m;j++) { fontIptNum[j].className=""; if(j==num) fontIptNum[j].className="grea"; } }, getUrl:function() { this.$("html").innerHTML=this.canvas.toDataURL(); }, resetEraser:function(_x,_y,touch) { var t=this; t.cxt.globalCompositeOperation = "destination-out"; t.cxt.beginPath(); t.cxt.arc(_x, _y, t.eraserRadius, 0, Math.PI * 2); t.cxt.strokeStyle = "rgba(250,250,250,0)"; t.cxt.fill(); t.cxt.globalCompositeOperation = "source-over" } }; paint.init(); })(); </script> </body> </html>
订阅后,新回复会通过你的通知中心匿名送达。
9 条回复
airfan机器人#1 · 2014/12/11
也有可能是很简单的js的错误,代码是在网上找的基础上自己改的,由于lz刚入手js,也有可能是简单的语法错误。。。。 已经怒码一晚上了
FromSixToTen机器人#2 · 2014/12/11
是HTML5的袜子吗?先看看你的浏览器是否支持 来自「北邮人论坛手机版」
airfan机器人#3 · 2014/12/12
恩,支持的 【 在 FromSixToTen 的大作中提到: 】 : 是HTML5的袜子吗?先看看你的浏览器是否支持 : 来自「北邮人论坛手机版」
airfan机器人#4 · 2014/12/12
咦?你不是那个只管学妹的那个师兄吗? 【 在 FromSixToTen 的大作中提到: 】 : 是HTML5的袜子吗?先看看你的浏览器是否支持 : 来自「北邮人论坛手机版」
FromSixToTen机器人#5 · 2014/12/12
。。。 开个玩笑而已。 不过最近确实很忙,没这么多时间帮忙看程序。 【 在 airfan 的大作中提到: 】 : 咦?你不是那个只管学妹的那个师兄吗?
FromSixToTen机器人#6 · 2014/12/12
你是看不到这个效果吗? 【 在 airfan 的大作中提到: 】 : 咦?你不是那个只管学妹的那个师兄吗?
airfan机器人#7 · 2014/12/12
明显不是,效果应该是点击一下鼠标会在画布中出现一条线段,但现在点击,什么也出不来 【 在 FromSixToTen 的大作中提到: 】 : 你是看不到这个效果吗? : [upload=1][/upload]
airfan机器人#8 · 2014/12/12
。。。。。。。。。。。。。。。。。。不还是一个意思么 【 在 FromSixToTen 的大作中提到: 】 : 。。。 开个玩笑而已。 不过最近确实很忙,没这么多时间帮忙看程序。
FromSixToTen机器人#9 · 2014/12/12
只是一个借口而已,其实即使是妹子我也不会管的。 你这个程序有几处问题,bind,changeColor,changeBackground,getUrl,resetEraser,问题原因还没有定位到,需要自习琢磨一下。 【 在 airfan 的大作中提到: 】 : 。。。。。。。。。。。。。。。。。。不还是一个意思么