欧美三区四区_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ù)制代碼 代碼如下:www.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ù)制代碼 代碼如下:www.ghpqjb.com

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

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

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

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

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

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

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

復(fù)制代碼 代碼如下:www.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ù)制代碼 代碼如下:www.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ù)制代碼 代碼如下:www.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ù)制代碼 代碼如下:www.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教程
欧美精品色综合| 一本久道久久久| 成人天堂yy6080亚洲高清| 欧美福利电影在线观看| 亚洲午夜视频在线观看| 欧美在线视频一区二区| 日本超碰在线观看| 免费av网站观看| 蜜桃精品视频在线观看| 欧美成人一区二区三区| 乱色588欧美| 天堂网avav| 美女精品一区最新中文字幕一区二区三区 | 伊人精品在线| 欧美亚洲综合网| 99在线首页视频| 国产精品扒开腿做爽爽| 日本超碰一区二区| 日本一区二区高清| 91精品国产91久久久久| 五月六月丁香婷婷| 欧美va视频| 99re这里只有精品6| 久久精品国产2020观看福利| 亚洲中文字幕无码中文字| 一区二区的视频| 日韩专区欧美专区| 精品久久久久久亚洲综合网| 亚洲综合av一区| 亚洲黄网在线观看| 亚洲高清毛片| 欧美一区二区啪啪| 亚洲v国产v在线观看| 日韩精品视频免费播放| 你懂的国产精品| 欧美图片一区二区三区| 久久国产精品一区二区三区四区| 成年人av电影| 一区二区三区在线| 欧美性猛交xxxx黑人交| 欧美日韩国产三区| 天天综合网入口| 亚洲看片一区| 精品免费一区二区三区| 日本一区二区三区四区五区六区| 欧美在线视频精品| 日本女优在线视频一区二区| 精品亚洲一区二区三区在线播放| 欧美人成在线观看| 国产刺激高潮av| 福利电影一区二区| 九九精品视频在线观看| 三日本三级少妇三级99| 国产精品3区| 亚洲日本一区二区| 91久久国产综合久久91精品网站| 日韩在线视频免费看| 三区四区不卡| 欧美人妖巨大在线| 中文字幕第50页| 精品人妻伦一区二区三区久久| 国产裸体歌舞团一区二区| 久久久精品网站| 久久无码人妻一区二区三区| 日韩激情精品| 亚洲高清免费视频| 狠狠色狠狠色综合人人| 九九热在线视频播放| 亚洲自啪免费| 在线亚洲国产精品网| 亚洲欧美久久久久| 国产高清亚洲| 午夜国产精品一区| 青青草成人激情在线| 成年人晚上看的视频| 另类中文字幕网| 欧美成人中文字幕| 手机在线看片日韩| 欧美日韩中字| 欧美一区二区精美| 99热亚洲精品| 91天天综合| 亚洲免费观看高清完整| 超碰97在线播放| 国产又黄又粗又爽| 男女男精品视频网| 九九久久久久99精品| 日本黄色录像片| 成人羞羞视频播放网站| 欧美一区二区三区啪啪| 成熟丰满熟妇高潮xxxxx视频| 免费电影日韩网站| 亚洲精品老司机| 久久久久无码国产精品一区| 国产情侣免费视频| 农村妇女精品一区二区| 成人国产精品久久| 五月天激情综合| 亚洲欧美国产精品桃花| www.成人精品| 国产欧美一区二区精品忘忧草 | www.久久精品.com| 2020国产成人综合网| 国产裸体写真av一区二区| 久操免费在线视频| 日韩精品亚洲一区| 欧美激情亚洲另类| 日本美女xxx| 在线播放亚洲| 中文字幕在线观看亚洲| 欧类av怡春院| 亚洲一区二区三区| 在线观看欧美日韩| 伊人网综合视频| 99精品视频在线| 精品亚洲夜色av98在线观看| 国产欧美精品一二三| 欧美女优在线视频| 精品福利av导航| 日韩欧美理论片| 日韩理论电影| 精品中文字幕久久久久久| 免费国偷自产拍精品视频| 欧美自拍偷拍| 亚洲欧洲高清在线| 人妻体内射精一区二区三区| 91精品秘密在线观看| 亚洲日本成人网| 亚洲av成人片色在线观看高潮| 影视一区二区| 色狠狠久久aa北条麻妃 | 国产欧美日韩影院| 日韩成人在线视频| 国产精品99久久久精品无码| 亚洲成av人片乱码色午夜| 亚洲欧美中文日韩在线v日本| 在线看黄色的网站| 国产一在线精品一区在线观看| 色婷婷久久av| 香蕉成人在线视频| 美女在线视频一区| 国产精品xxx视频| 精品人妻一区二区三区潮喷在线| 久久综合色之久久综合| 国产亚洲欧美一区二区三区| 亚洲国产一二三区| 亚洲一区二区在线观看视频 | 欧美日韩老妇| 亚洲天天在线日亚洲洲精| 狠狠人妻久久久久久综合蜜桃| 伊人成人在线视频| 午夜欧美不卡精品aaaaa| 欧美精品videos极品| 国产美女主播视频一区| 91啪国产在线| www.国产精品视频| 亚洲国产一区二区三区青草影视| 人妻激情另类乱人伦人妻| 国产一区二区三区免费在线| 91.成人天堂一区| 手机在线视频一区| 欧美日韩国产色综合一二三四| 欧美另类交人妖| 久久久久久久久久久久久久免费看| 懂色av噜噜一区二区三区av| 懂色中文一区二区三区在线视频| 成人爽a毛片一区二区| 亚洲大片免费看| av天堂永久资源网| 国产免费播放一区二区| 色噜噜亚洲精品中文字幕| 欧美日韩黄色网| av福利精品导航| 清纯唯美一区二区三区| 桃子视频成人app| 欧美男生操女生| 欧美人与性动交α欧美精品| 日韩午夜免费| 国产精品久久久久久五月尺| 国产精品毛片一区二区在线看舒淇| 亚洲精品国产精华液| 黄色成人在线看| 精品国产乱码久久久久久1区2匹| 久久精品国产精品| 国产一级二级毛片| 久久久久久亚洲综合| 伊人情人网综合| 国产精品三p一区二区| 亚洲欧美中文字幕| 538任你躁在线精品视频网站| 99久久久免费精品国产一区二区 | 中文亚洲av片在线观看| 亚洲乱码国产乱码精品精可以看 | 二区视频在线观看| 最新热久久免费视频| 成人一级生活片| av亚洲在线观看| 久久久久久亚洲| 免费看av在线| 香蕉成人啪国产精品视频综合网| 成人性视频欧美一区二区三区| 欧美激情精品久久久六区热门| 欧美诱惑福利视频| 国产精品无码免费播放| 一本一本大道香蕉久在线精品 | 国模视频一区二区三区| 国产精品尤物视频| 偷拍日韩校园综合在线| 久久久精品高清| 天堂成人国产精品一区| 国产精品99久久久久久久 | 午夜精品蜜臀一区二区三区免费 | av噜噜在线观看| 亚洲欧美视频| 成人免费视频视频在| 国产精品亲子伦av一区二区三区| 亚洲精品美女视频| 激情视频在线播放| 国产精品高潮呻吟| 亚洲男人天堂色| 久久精品亚洲一区二区| 国产区欧美区日韩区| 国产成年精品| 色青青草原桃花久久综合| 在线观看日本视频| 欧美日韩性生活视频| 午夜影院免费版| 久久国产精品无码网站| 日韩福利在线| 免费精品国产| 欧美中在线观看| 亚洲色偷精品一区二区三区| 精品少妇一区二区三区| a在线视频播放观看免费观看| 国产精品丝袜久久久久久app| 色欲av无码一区二区人妻| 亚洲狠狠婷婷| 国产精品一区二区欧美黑人喷潮水| 一区二区三区亚洲变态调教大结局 | 欧美激情 国产精品| 欧美日韩三区| 亚洲一区二区中文字幕| 欧美日韩黄网站| 欧美裸体男粗大视频在线观看| 99久久夜色精品国产亚洲| 7878成人国产在线观看| 国产免费一区二区三区四区| 中文字幕亚洲在| 欧美一级视频在线| 国产一区二区女| 免费看日本黄色| 亚洲精品乱码| 欧美二级三级| 欧美日韩水蜜桃| 成人免费看片视频| 久久影院一区二区三区| 欧美激情视频网站| 少妇一区二区三区四区| 亚洲美女在线观看| 超碰在线免费97| 欧美日韩二区三区| 成年人午夜剧场| 综合国产视频| 欧美日韩精品一区二区天天拍小说| 在线观看福利片| 中文字幕欧美日本乱码一线二线| 日韩精品视频一二三| 国产精品18久久久久久vr | 久久亚洲精品伦理| 日本精品二区| 久久久久久久久久久妇女| 91久久久一线二线三线品牌| 国产精品香蕉| 日本久久久久久久久| 日本在线一区二区| 欧美二区在线播放| 日韩免费电影| 久久久国产视频91| 欧美一区二区在线观看视频| 亚洲视频一区二区三区| 一区二区三区播放| 亚洲国产黄色片| 中文字幕在线观看欧美| 日韩午夜中文字幕| 欧美一级特黄视频| 69p69国产精品| 亚洲日本视频在线观看| 欧美日本精品一区二区三区| 精品视频久久久久| 欧美午夜片在线看| 国产大片aaa| 欧美色区777第一页| 欧美久久久久久久| 激情小说一区| 国产精品一区二区久久精品| 欧美黄视频在线观看| 欧美最猛性xxxx| 国产精品一级在线观看| 欧美在线亚洲一区| 日韩高清一区| 国产精品你懂得| 久草在线综合| 成人自拍性视频| 九九热精品视频在线观看| 亚洲va久久久噜噜噜久久天堂| 精品中文字幕一区二区三区av| 91美女片黄在线观看游戏| 台湾色综合娱乐中文网| 91精品视频在线| 国产精品一区高清| 国产在线一区二| 欧美色一级片| 日韩视频在线免费播放| 日韩极品在线观看| 97在线国产视频| 国产一区欧美二区| 爱情岛论坛成人| 久久久天堂av| 日韩aaaaa| 亚洲自拍另类综合| 91嫩草丨国产丨精品| 在线精品国精品国产尤物884a| 国产无码精品一区二区| 欧美一区二区三区成人| 在线观看日韩一区二区| 亚洲男人天堂2024| 婷婷色在线观看| 欧美精品第一页在线播放| 国产精品亚洲欧美日韩一区在线| 国产精品久久电影观看| 人人网欧美视频| 国产精品乱码视频| 亚洲夜间福利| 国产欧美123| 久久精品国产亚洲aⅴ| 免费看黄色一级大片| 久久久久久久久一| 少妇按摩一区二区三区| 精品女厕一区二区三区| 国产在线视频卡一卡二| 精品美女被调教视频大全网站| 国产喷水吹潮视频www| zzijzzij亚洲日本成熟少妇| 精品女同一区二区三区在线观看| 国产精品美女www| 日韩欧美精品综合| 视频一区二区三区免费观看| 视频在线在亚洲| 亚洲色图38p| 中文字幕 久热精品 视频在线| 毛片久久久久久| 欧美日韩国产高清一区| 亚洲天堂中文在线| 久久精品电影一区二区| 日本精品视频| 99视频免费观看| 国产日韩专区| 久草综合在线观看| 国产精品亲子伦对白| 欧美爱爱免费视频| 精品国产乱码久久久久久1区2区| 色婷婷激情五月| 日韩av电影院| 日韩一区欧美| 米仓穗香在线观看| 99视频一区二区| 亚洲精品一区二区三区影院忠贞| 欧美日韩一区二区三区视频| 97人妻一区二区精品免费视频| 欧美高清不卡在线| 日本国产精品| 秋霞在线观看一区二区三区| 精品在线免费观看| 国产成人av免费观看| 动漫精品一区二区| 中文字幕在线观看第二页| 另类少妇人与禽zozz0性伦| 成人动态视频| 日韩免费av一区二区三区| 黑人巨大精品欧美一区| 国产在线不卡av| 欧美午夜免费电影| 精品国产乱码一区二区三 | 成人四虎影院| 97se在线视频| 日本午夜一本久久久综合| 久草福利在线观看| 在线观看成人小视频| 精品久久久中文字幕人妻| 日本精品久久中文字幕佐佐木| 久久精品亚洲人成影院 | 99re国产在线| 久久这里只有精品视频首页| 青青久久av| 亚洲黄色网址在线观看| 99re成人精品视频| 国产喷水在线观看| 亚洲精品中文字幕av| 爱情电影网av一区二区| 久久久久久a亚洲欧洲aⅴ|