欧美三区四区_av先锋影音资源站_亚洲第一论坛sis_影音先锋2020色资源网_亚洲精品社区_在线免费观看av网站_国产一区二区伦理_亚洲欧美视频一区二区_99视频精品全部免费在线_精精国产xxxx视频在线

突破canvas語法限制 讓他支持鏈?zhǔn)秸Z法_HTML5教程

編輯Tag賺U幣

推薦:html5拖曳操作 HTML5實(shí)現(xiàn)網(wǎng)頁元素的拖放操作
HTML5之前,要實(shí)現(xiàn)網(wǎng)頁元素的拖放操作,需要依靠mousedown、mousemove、mouseup等API,通過大量的JS代碼來實(shí)現(xiàn),而如今html5大大簡化了網(wǎng)頁元素的拖放操作編程難度,API除了支持瀏覽器內(nèi)部元素的拖放外,同時支持瀏覽器和其它應(yīng)用程序之間的數(shù)據(jù)互相拖動

先來看一段正常的canvas畫圖語法:

復(fù)制代碼 代碼如下:m.ghpqjb.com

ctx.arc(centerX,centerY,radius,0,PI*2,true);
ctx.shadowColor = 'rgba(0,0,0,0.5)';
ctx.shadowBlur = "10";
ctx.fill();
ctx.beginPath();
ctx.shadowColor = 'rgba(0,0,0,0)';
ctx.moveTo(centerX-radius,centerY);
ctx.lineTo(centerX-radius,centerY - 50);
ctx.lineTo(centerX+radius,centerY - 50);
ctx.lineTo(centerX+radius,centerY);
// ctx.lineTo(centerX-radius,centerY);
ctx.fill();
ctx.beginPath();
ctx.fillStyle = 'rgba(255,0,0,1)';
ctx.arc(centerX,centerY-50,radius,0,PI*2,true);
ctx.fill();

我對canvas原生語法不爽的有兩點(diǎn):1是每句前面都有寫ctx(即canvas的context2d對象),2是每個函數(shù)或?qū)傩远家家恍校速M(fèi)空間。

我對jQuery的鏈?zhǔn)秸Z法很欣賞,比如:

復(fù)制代碼 代碼如下:m.ghpqjb.com

$('#div1').show(300).html(p).delay(3000).slideUp(300).remove();

所以,我也想用這種語法來進(jìn)行canvas繪圖:

復(fù)制代碼 代碼如下:m.ghpqjb.com

ctx.moveTo(500,0).lineTo(500,500).strokeStyle('#f00').stroke();

有個辦法就是模擬一個context2d對象,這個對象支持所有的原生context2d方法,但又支持鏈?zhǔn)健?

不過,代碼不能太多,多了就沒人喜歡用了。

下面就是完整的代碼段,這個“類”我取名為XtendCanvas(又是以X開頭的喲):

復(fù)制代碼 代碼如下:m.ghpqjb.com

// 讓canvas支持鏈?zhǔn)秸Z法,來自十年燈
~function () {var pro = ['save','restore', 'scale', 'rotate', 'translate', 'transform', 'createLinearGradient', 'createRadialGradient', 'getLineDash', 'clearRect', 'fillRect', 'beginPath', 'closePath', 'moveTo', 'lineTo', 'quadraticCurveTo', 'bezierCurveTo', 'arcTo', 'rect', 'arc', 'fill', 'stroke', 'clip', 'isPointInPath', 'measureText', 'clearShadow', 'fillText', 'strokeText', 'strokeRect', 'drawImage', 'drawImageFromRect', 'putImageData', 'createPattern', 'createImageData', 'getImageData', 'lineWidth','strokeStyle','globalAlpha','fillStyle','font','shadowOffsetX','shadowOffsetY','shadowBlur','shadowColor','lineCap','lineJoin','miterLimit'];
function XtendCanvas (canvas) {

var ctx = canvas.getContext('2d'),
fn = function(){},
fnP = fn.prototype;
for(var j = 0,p=pro[0];p;p=pro[j++]) {
fn.prototype[p] = function (p) {
return function () {
var args = Array.prototype.slice.call(arguments);
// console.log(args);
if(typeof ctx[p] == 'function') {
ctx[p].apply(ctx,args);
} else {
ctx[p] = args+'';
}
return fnP;
};
}(p);
}
return new fn;
};
window.XtendCanvas = XtendCanvas;
}();

使用方法很簡單,給他傳一個canvas對象,他就會返回一個類似context2d的對象,你可以像普通的context2d一樣使用,但不同的是,他支持鏈?zhǔn)秸Z法了:

復(fù)制代碼 代碼如下:m.ghpqjb.com

var cvs = document.getElementById('cvs');
var ctx = XtendCanvas(cvs);
ctx.moveTo(500,0).lineTo(500,500).strokeStyle('#f00').stroke();

這樣一來你就可以把所有操作都放在一句話里,你也可以隨時中斷,做其他的事,然后繼續(xù)。

這段代碼并不是對canvas的增強(qiáng),只是單純的讓他支持鏈?zhǔn)秸Z法了。但勝在代碼少,可以嵌入到任何JS庫中,在此我希望能得到你的一個“推薦”

代碼中肯定有值得改進(jìn)的地方,大家可以自行完善。但——吃水不忘挖井人,希望大家記得我,最重要的是思路,對吧?下面就是思路:
大家可以看到,代碼中最長的部分,是那個保存方法名的數(shù)組pro,核心代碼反而很短。為什么我要建這么一個數(shù)組呢?

本來我也想直接從CanvasRenderingContext2D繼承所有原生方法,但每個瀏覽器下面遍歷這個CanvasRenderingContext2D,結(jié)果都不一致。如果我把他們直接繼承,那么當(dāng)你想用chrome中的方法套在firefox里執(zhí)行,就會報錯。

所以我只是把CanvasRenderingContext2D中的通用的,無異議的方法與屬性名提取了出來,沒辦法,只有建一個固定的數(shù)組——大家可以自行決定往里面添加你的方法。

方法與屬性提取出來了,接著就是把原生的方法加在我的新對象上。我建了一個叫fn的空函數(shù),放置我的方法。

由于數(shù)組中的這些元素既有函數(shù),也有屬性,所以我在循環(huán)中判斷了他是否是一個函數(shù),如果是函數(shù),就帶參數(shù)執(zhí)行;不是函數(shù)——那么就肯定是屬性了,就把參數(shù)賦給這個屬性。

這樣大家在碰到設(shè)置canvas屬性的時候,就不用中斷鏈了,直接把屬性值當(dāng)參數(shù)傳進(jìn)去就行了,比如:

復(fù)制代碼 代碼如下:m.ghpqjb.com

ctx.strokeStyle('#f00')

最后,關(guān)鍵的關(guān)鍵,就是返回fn,這招是從jQuery學(xué)來的,是支持鏈?zhǔn)秸Z法的關(guān)鍵。

這段中用到了匿名函數(shù),閉包,原型,以及我以前文章講過的奇怪的for循環(huán)。

說起來好像挺簡單的,不過我實(shí)在是想了很久,希望對大家有用。

在寫代碼的過程中,我發(fā)現(xiàn)chrome的做法很不錯,他有一串以set開頭的函數(shù),如setStrokeColor,setLineCap等函數(shù),給他們傳參數(shù),就可以替代對應(yīng)的strokeStyle和lineCap等屬性,也就是說,他的canvas里面就全是函數(shù)而沒有屬性了那樣的話我就不用判斷是函數(shù)還是是屬性了。但firefox里面沒有這些,所以我還是只能用前面的思路。

我也把那一串set函數(shù)給放出來吧

復(fù)制代碼 代碼如下:m.ghpqjb.com

var bak = ['setTransform','setAlpha', 'setCompositeOperation', 'setLineWidth', 'setLineCap', 'setLineJoin', 'setMiterLimit', 'setLineDash','setShadow','setStrokeColor','setFillColor'];

他們的用處一看就懂。你也可以選擇一些加入前面代碼的pro數(shù)組中。

最后,我很奇怪我的代碼怎么會沒有高亮了。。。如果你都看到最后了,那么還是給個推薦吧,讓我也虛榮一把

分享:HTML5引入的新數(shù)組TypedArray介紹
Javascript中的數(shù)組是個強(qiáng)大的家伙:你可以創(chuàng)建的時候不規(guī)定長度,而是動態(tài)的去改變長度。你可以把他當(dāng)成普通的數(shù)組去讀取,也可以當(dāng)他是堆棧來使用。你可以改變數(shù)組中每個元素的值甚至是類型

來源:未知//所屬分類:HTML5教程/更新時間:2013-04-22
相關(guān)HTML5教程
伊人久久一区二区| 浴室偷拍美女洗澡456在线| 欧美 变态 另类 人妖| 午夜视频免费在线| 日韩国产欧美三级| 欧美猛男gaygay网站| 91在线免费观看网站| 看全色黄大色黄女片18| 第四色男人最爱上成人网| 精品一区二区三区香蕉蜜桃| 日韩精品专区在线影院重磅| 久久综合一区| 免费黄色激情视频| 欧美一级全黄| 亚洲欧洲无码一区二区三区| 久久久免费av| 中文字幕天天干| 成人毛片在线精品国产| 日韩成人av影视| 欧美成人免费网站| 日本免费高清不卡| 免费网站看av| 日韩一区亚洲二区| 午夜a成v人精品| 91精品国产自产在线| 久久午夜夜伦鲁鲁片| 精品视频一二| 久久精品一区蜜桃臀影院| 欧美精品日韩三级| 日韩视频免费在线播放| 国产熟女一区二区三区五月婷| 久久久噜噜噜久久狠狠50岁| 欧美v国产在线一区二区三区| 日韩偷拍一区二区| 日韩欧美视频在线免费观看| 午夜久久福利| 欧美精品日韩一区| 日韩精品另类天天更新| 九九热精品视频在线| 精品999日本| 日韩一区二区精品| 中文字幕99| 最新中文字幕在线观看视频| 国产精品一页| 亚洲第一黄色网| 喜爱夜蒲2在线| 国产精品羞羞答答在线| 麻豆精品一区二区三区| 亚洲女人被黑人巨大进入| 日本免费不卡一区二区| 成人午夜视频一区二区播放| 国产成人综合网| 欧美成人激情在线| 亚洲成年网站在线观看| 亚洲精品99久久久久| 99亚洲国产精品| 99在线观看精品视频| 国产麻豆91精品| xxxxxxxxx欧美| 777视频在线| 亚州精品国产| 亚洲日本在线天堂| 亚洲伊人久久综合| 欧美xxxx黑人xyx性爽| 欧美激情一区| 精品蜜桃在线看| 国产在线无码精品| 国产xxxx孕妇| 国产精品99久久久久久久vr| 欧美成人高清视频| 亚洲精品无码一区二区| 国产精伦一区二区三区| 亚州成人在线电影| 精品视频免费观看| 中文字幕在线看人| 男人的j进女人的j一区| 中文字幕成人精品久久不卡| xx欧美撒尿嘘撒尿xx| 91麻豆精品国产综合久久久| 亚洲女女做受ⅹxx高潮| 99久久精品免费看国产四区| 国产精品成人av久久| 久久成人国产| 最近2019中文字幕在线高清| 激情文学亚洲色图| 91久久偷偷做嫩草影院电| 精品av在线播放| 日本精品一区二区| 国产理论片在线观看| 国产91在线看| 国产成人精品在线播放| sm捆绑调教视频| 在线精品观看| 亚洲天堂视频在线观看| 亚洲xxx在线观看| 果冻天美麻豆一区二区国产| 色婷婷av一区二区三区之一色屋| 亚洲欧美日韩国产yyy| www.四虎在线观看| 国产人伦精品一区二区| 91中文精品字幕在线视频| 久草视频精品在线| 日本vs亚洲vs韩国一区三区| 欧美二区乱c黑人| 午夜在线观看一区| 欧美先锋影音| 综合激情国产一区| yy1111111| 91精品国产调教在线观看| 日韩电影中文字幕| 一级黄色大片儿| 精品99在线| 欧美精品一区二区三区一线天视频| 91看片就是不一样| 国产精品调教| 欧美精品v国产精品v日韩精品| 国产h视频在线播放| 精品国产第一国产综合精品| 色综合久久中文字幕| 国产又粗又猛又爽又黄的网站| 成人全视频免费观看在线看| 午夜精品123| 污污污污污污www网站免费| av亚洲一区| 色综合久久中文字幕| 精品视频在线观看一区| 国产美女视频一区二区| 色拍拍在线精品视频8848| 免费看欧美一级片| 日本精品在线观看| 欧美日韩高清一区| 91看片就是不一样| 九九亚洲精品| 亚洲精品久久久久久久久久久| 两女双腿交缠激烈磨豆腐| 99久久影视| 色婷婷综合成人av| 成人小视频免费看| 丝瓜av网站精品一区二区 | 久久综合久久八八| 亚洲色图 激情小说| 久久精品综合| 日韩av免费在线观看| 伊人久久综合视频| 99国产精品99久久久久久| 操一操视频一区| www.四虎在线观看| 亚洲妇熟xx妇色黄| 精品国产av无码一区二区三区 | 7777精品久久久久久| 精品无码免费视频| 成人动漫一区二区三区| 国产精品久久亚洲7777| 韩国av免费在线观看| 亚洲一二三区不卡| 日本欧美黄色片| 日韩伦理一区二区三区| 日韩av在线电影网| 双性尿奴穿贞c带憋尿| 久久九九免费| 国产精品久久久久久av| 波多野结衣一区二区在线| 国产农村妇女毛片精品久久麻豆| 日韩欧美在线电影| 北岛玲精品视频在线观看| 日韩午夜小视频| 亚洲熟女一区二区| 销魂美女一区二区三区视频在线| 日韩av片永久免费网站| 亚洲综合网av| 亚洲精品老司机| 女人被男人躁得好爽免费视频 | 精品国产午夜福利| 欧美国产成人精品| 三年中文高清在线观看第6集| 电影中文字幕一区二区| 欧美va在线播放| 国产真实乱人偷精品| 日韩一区欧美二区| 91精品在线播放| 刘亦菲毛片一区二区三区| 日韩欧美在线视频免费观看| 亚洲国产成人va在线观看麻豆| 欧美黄色一区二区| 欧美一级在线亚洲天堂| 亚洲天堂网视频| 亚洲午夜精品网| 国产激情在线观看视频| 亚洲一区在线| 日本三级韩国三级久久| 国产精品无码一区二区桃花视频| 精品动漫一区二区三区| 国产原创精品在线| 亚洲激精日韩激精欧美精品| 国产精品日日做人人爱| 午夜精品久久久久久久99| 欧洲精品视频在线观看| 中文字幕一二三| 日韩av午夜在线观看| 成人动漫视频在线观看完整版| 色豆豆成人网| 亚洲第一天堂av| 我要看一级黄色录像| 91色在线porny| 亚洲五码在线观看视频| 欧美日韩精品在线一区| 欧美精品www| 中文字幕一区二区三区免费看| 亚洲成av人在线观看| 手机av在线免费| 久色成人在线| 国产精品久久久久久久免费大片| 欧洲美女精品免费观看视频| 日韩成人网免费视频| 国精品无码一区二区三区| 国产丝袜美腿一区二区三区| 欧美性潮喷xxxxx免费视频看| 欧美xxxx中国| 国产精品69久久| 手机看片福利永久| 日韩欧美国产系列| 少妇高潮惨叫久久久久| 国产亚洲一二三区| 国产精品国产亚洲精品看不卡| 91精品秘密在线观看| 国产成人鲁鲁免费视频a| 国模人体一区二区| 精品日韩99亚洲| 麻豆网址在线观看| 国产精品美女视频| 欧美日韩亚洲一二三| 欧洲成人午夜精品无码区久久| 精品一区二区三区四区五区| 中国人与牲禽动交精品| 日本高清不卡码| 欧美日韩国产在线看| www.555国产精品免费| 国产成人综合网站| 超碰10000| 欧美日韩第一区| 成人福利免费观看| 婷婷丁香久久| 久久精品91久久香蕉加勒比| 中文字幕在线观看1| 欧美亚洲国产一区二区三区va| 亚洲做受高潮无遮挡| 91色综合久久久久婷婷| 凹凸国产熟女精品视频| 99亚洲精品| 韩国精品一区二区三区六区色诱| 牛牛精品成人免费视频| 久久久久久久久国产| 亚洲美女福利视频| 精品奇米国产一区二区三区| 欧美精品一区二区成人| 一区二区久久久久| 黄色性视频网站| 99精品视频在线免费观看| 免费看日本毛片| 亚洲人人精品| 蜜桃视频在线观看成人| 国产不卡av一区二区| 国产精品69久久| 日本免费成人| 欧美成人黑人xx视频免费观看| www.桃色av嫩草.com| 亚洲电影免费观看高清完整版在线| 亚欧洲精品在线视频| 欧美日韩激情视频| 色一情一交一乱一区二区三区| 国产精品久久久久一区二区三区| 亚欧激情乱码久久久久久久久| 国产美女av一区二区三区| www.国产二区| 亚洲综合精品| 日韩精品一区二区三区四区五区| 久久综合av| 99精品国产一区二区| 亚洲区小说区| 国产日产久久高清欧美一区| 成人午夜三级| 国产精品igao视频| 日韩精品成人| 欧美亚洲伦理www| 欧美日韩破处视频| 久久久久国色av免费观看性色| 国产另类xxxxhd高清| 久久久精品中文字幕| 天堂在线视频免费观看| 日韩视频免费在线| 天堂av在线免费| 日韩视频精品在线| 亚洲精品mv| 美女国内精品自产拍在线播放| 少妇人妻一区二区| 日韩最新中文字幕电影免费看| 成人午夜免费福利| 久久精品国产亚洲一区二区| 神马午夜精品95| 久久视频中文字幕| 粉嫩一区二区| 欧美激情精品久久久久久| 久久久人成影片一区二区三区在哪下载| 久久激情视频免费观看| 波多视频一区| 欧美精品免费在线观看| 成人国产一区| 81精品国产乱码久久久久久| 国产精品日本一区二区三区在线| 91av在线影院| 榴莲视频成人app| 国产精品第13页| 91久久精品国产91性色| 北条麻妃在线一区二区免费播放| 国产精品美女主播在线观看纯欲| 动漫3d精品一区二区三区乱码| 成人春色激情网| 欧美日中文字幕| 久久天天狠狠| 亚洲第一区色| av磁力番号网| 久久成人免费电影| 日韩精品免费播放| 91视频国产观看| 久久久男人的天堂| 亚洲精品中文字幕在线观看| 欧美老女人性生活视频| 一本到三区不卡视频| 日韩黄色三级视频| 欧美tickling挠脚心丨vk| 国产男女无套免费网站| 日韩网站在线观看| 欧美性片在线观看| 日韩av观看网址| 亚洲国产最新| 精品久久久久亚洲| 激情综合在线| 日本一本中文字幕| 成人性视频免费网站| 久久精品一二三四| 亚洲欧美日韩国产手机在线| 天天色天天综合| 欧美日韩另类一区| 91午夜交换视频| 理论片在线不卡免费观看| 亚洲男女网站| 国产综合在线观看视频| 天天综合一区| 四虎永久免费网站| 国产成人精品免费网站| 激情小说欧美色图| 天天射天天干天天| 在线电影欧美日韩一区二区私密| 欧美一级二级视频| 国产日韩在线免费| 亚洲一本二本| www.av毛片| 97久久精品人人澡人人爽| 国产成人无码一区二区在线观看| 色综合久久天天综合网| a片在线免费观看| 日韩最新在线视频| 999久久久精品一区二区| 精品午夜一区二区| 丝袜亚洲另类欧美| 中文字幕在线观看日| 一区二区在线看| 日本少妇全体裸体洗澡| 亚洲精品视频二区| 欧美成人xxxx| 97视频热人人精品| 校园春色综合网| 三级a三级三级三级a十八发禁止| 中文字幕综合网| 久久成人在线观看| 国产丝袜精品视频| 日韩福利影视| 国产精品免费一区二区三区四区 | 久久久精品视频国产| 亚洲高清免费视频| 亚洲欧美另类在线视频| www.久久撸.com| 欧美理伦片在线播放| 性欧美.com| 成人美女视频在线看| 熟女高潮一区二区三区| 91精品久久久久久久91蜜桃| 黄色成人一级片| 国产欧美日韩高清| 亚洲激情女人| 97超碰成人在线| 亚洲国产精品麻豆| 五月婷婷激情五月| 国模视频一区二区三区| 999精品在线| 国产精品后入内射日本在线观看| 国产精品二三区| 国产又黄又爽又色| 久久99热这里只有精品国产| 国产亚洲精品美女久久久久久久久久|