亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > JavaScript > 正文

javascript結合html5 canvas實現(可調畫筆顏色/粗細/橡皮)的涂鴉板

2019-11-20 22:45:43
字體:
來源:轉載
供稿:網友
js+html5 canvas實現的涂鴉畫板特效,可調畫筆顏色|粗細|橡皮,可以保存涂鴉效果為圖片編碼,非常適合學習html5的canvas,必須支持html5的瀏覽器才能看到效果。
復制代碼 代碼如下:

<!doctype html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>javascript結合html5 canvas實現的涂鴉板 - 分享JavaScript-sharejs.com</title>
<meta name="Copyright" content="JavaScript分享網 http://www.sharejs.com/" />
<meta name="description" content="javascript結合html5 canvas實現的涂鴉板,JavaScript分享網,js腳本,網頁特效,網頁模板,png圖標,矢量圖下載" />
<meta content="JavaScript,分享,JavaScript代碼,Ajax,jQuery,網頁模板,PNG圖標,矢量圖" name="keywords" />
</head>
<body>
<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.clickDrag=[];
this.lock=false;//鼠標移動前,判斷鼠標是否按下
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.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";
*/
t.resetEraser(_x,_y,touch);
}else
{
t.movePoint(_x,_y);//記錄鼠標位置
t.drawPoint();//繪制路線
}
t.lock=true;
};
/*鼠標移動事件*/
this.canvas['on'+t.MoveEvent]=function(e)
{
var touch=t.touch ? e.touches[0] : e;
if(t.lock)//t.lock為true則執行
{
var _x=touch.clientX - touch.target.offsetLeft;//鼠標在畫布上的x坐標,以畫布左上角為起點
var _y=touch.clientY - touch.target.offsetTop;//鼠標在畫布上的y坐標,以畫布左上角為起點
if(t.isEraser)
{
//if(t.Timer)clearInterval(t.Timer);
//t.Timer=setInterval(function(){
t.resetEraser(_x,_y,touch);
//},10);
}
else
{
t.movePoint(_x,_y,true);//記錄鼠標位置
t.drawPoint();//繪制路線
}
}
};
this.canvas['on'+t.EndEvent]=function(e)
{
/*重置數據*/
t.lock=false;
t.x=[];
t.y=[];
t.clickDrag=[];
clearInterval(t.Timer);
t.Timer=null;
};
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="您已使用橡皮擦!";
};
},
movePoint:function(x,y,dragging)
{
/*將鼠標坐標添加到各自對應的數組里*/
this.x.push(x);
this.y.push(y);
this.clickDrag.push(y);
},
drawPoint:function(x,y,radius)
{
for(var i=0; i < this.x.length; i++)//循環數組
{
this.cxt.beginPath();//context.beginPath() , 準備繪制一條路徑
if(this.clickDrag[i] && i){//當是拖動而且i!=0時,從上一個點開始畫線。
this.cxt.moveTo(this.x[i-1], this.y[i-1]);//context.moveTo(x, y) , 新開一個路徑,并指定路徑的起點
}else{
this.cxt.moveTo(this.x[i]-1, this.y[i]);
}
this.cxt.lineTo(this.x[i], this.y[i]);//context.lineTo(x, y) , 將當前點與指定的點用一條筆直的路徑連接起來
this.cxt.closePath();//context.closePath() , 如果當前路徑是打開的則關閉它
this.cxt.stroke();//context.stroke() , 繪制當前路徑
}
},
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;
//this.cxt.lineWidth = 30;
/*source-over 默認,相交部分由后繪制圖形的填充(顏色,漸變,紋理)覆蓋,全部瀏覽器通過*/
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>
<div style="clear:both"></div>
</body>
</html>
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
亚洲乱码一区av黑人高潮| 欧美性猛交xxxx乱大交3| 亚洲影视九九影院在线观看| 上原亚衣av一区二区三区| 亚洲丁香婷深爱综合| 久久精品国亚洲| 91大神福利视频在线| 亚洲2020天天堂在线观看| 日韩在线免费视频观看| 美日韩在线视频| 精品国产乱码久久久久酒店| 国产午夜一区二区| 久久精品国产91精品亚洲| 国产精品视频一区二区高潮| 亚洲午夜色婷婷在线| 国产色综合天天综合网| 亚洲国产欧美日韩精品| 日韩电影大片中文字幕| 日韩欧美亚洲范冰冰与中字| 国产精品av在线| 国产精品青青在线观看爽香蕉| 一区二区三区久久精品| 国产亚洲人成a一在线v站| 日韩精品视频三区| 国产在线播放不卡| 亚洲国产精品成人精品| 美女999久久久精品视频| 成人激情视频免费在线| 97国产一区二区精品久久呦| 亚洲欧美国产一本综合首页| 91av在线视频观看| 欧美日韩中文字幕综合视频| 日本一区二区三区四区视频| 欧美国产亚洲视频| 91精品国产777在线观看| 国产精品福利网站| 91社影院在线观看| 国外成人在线播放| 欧美国产在线视频| 久久精品视频99| 色偷偷噜噜噜亚洲男人的天堂| 国产精品一区二区三| 欧美日韩一区二区在线| 午夜精品久久久久久久白皮肤| 91精品国产高清| 精品国产一区av| xxav国产精品美女主播| 国产日韩欧美91| 国产成人精品综合| 日韩av电影中文字幕| 欧美俄罗斯性视频| 国产视频久久久久久久| 国产午夜精品全部视频播放| 国产精品国产三级国产aⅴ9色| 亚洲欧美制服另类日韩| 亚洲一级黄色片| 日韩视频免费在线观看| 91精品啪在线观看麻豆免费| 色综合久久久久久中文网| 成人性生交大片免费看视频直播| 国产精品aaaa| 亚洲国产精品网站| 日本一区二区三区四区视频| 欧美亚洲另类视频| 久久久爽爽爽美女图片| 日韩欧美国产网站| 精品久久久久久中文字幕大豆网| 色综合久久天天综线观看| 日韩av电影院| 在线视频欧美日韩精品| 91精品国产自产91精品| 日韩亚洲精品视频| 91精品视频大全| 亚洲国产91精品在线观看| 色妞色视频一区二区三区四区| 成人激情在线观看| 久久91亚洲人成电影网站| 一个人看的www久久| 成人淫片在线看| 国产激情综合五月久久| 国产免费一区二区三区在线能观看| 亚洲男人天堂2023| 91精品国产91久久| 在线亚洲欧美视频| 97热在线精品视频在线观看| 国产精品欧美激情在线播放| 日韩精品免费在线| 国产精品影院在线观看| 浅井舞香一区二区| 成人精品在线视频| 国产噜噜噜噜噜久久久久久久久| 欧美精品免费在线观看| 在线激情影院一区| 欧美性猛交xxxx| 奇米四色中文综合久久| 亚洲女同精品视频| 欧美精品性视频| 一区二区三区高清国产| 亚洲毛片在线免费观看| 精品亚洲aⅴ在线观看| 国产精品久久久久久久av大片| 久久久日本电影| 欧美日韩国产麻豆| 欧美在线视频播放| 国产精品一区二区久久国产| 九九热精品在线| 精品久久久久久久久久久久| 亚洲精品资源美女情侣酒店| 最近中文字幕日韩精品| 亚洲一二三在线| 亚洲一区二区久久久久久久| 在线日韩av观看| 另类美女黄大片| 欧美极品少妇xxxxⅹ喷水| 成人国产亚洲精品a区天堂华泰| 欧美国产日韩免费| 亚洲视频第一页| 国产精品一区二区性色av| 欧美黑人巨大xxx极品| 久久视频国产精品免费视频在线| 欧美午夜精品久久久久久浪潮| 亚洲日韩欧美视频一区| 亚洲天堂av在线免费观看| 欧美视频一二三| 欧美国产日本在线| 国产精品igao视频| 中文字幕在线看视频国产欧美| 国产精品香蕉在线观看| 成人午夜高潮视频| www.久久撸.com| 奇门遁甲1982国语版免费观看高清| 日韩一区二区欧美| 国产91露脸中文字幕在线| 91精品久久久久久久| 国产精品亚洲网站| 久久久久久91香蕉国产| 亚洲精品一区二区三区婷婷月| 国产精品视频男人的天堂| 国产不卡一区二区在线播放| 欧美巨猛xxxx猛交黑人97人| 日韩精品福利网站| 欧美亚洲成人xxx| 亚洲第一偷拍网| 日韩网站免费观看| 欧美高清理论片| 自拍偷拍免费精品| 国产精品伦子伦免费视频| 国产在线拍揄自揄视频不卡99| 成人做爰www免费看视频网站| 久久久久久久久久久网站| 精品亚洲夜色av98在线观看| 欧美专区在线播放| 中文字幕久热精品在线视频| 日韩欧美视频一区二区三区| 在线视频日韩精品| 欧美电影在线免费观看网站| 亚洲成人精品av| 92福利视频午夜1000合集在线观看| 亚洲国产精品久久久久秋霞蜜臀| 日韩欧美成人免费视频| 91网在线免费观看| 亚洲国产日韩欧美在线99| 成人午夜激情免费视频| 成人午夜在线影院|