中文字幕免费精品_亚洲视频自拍_亚洲综合国产激情另类一区_色综合咪咪久久

突破canvas語法限制 讓他支持鏈式語法
來源:易賢網 閱讀:2346 次 日期:2016-08-01 15:53:01
溫馨提示:易賢網小編為您整理了“突破canvas語法限制 讓他支持鏈式語法”,方便廣大網友查閱!

突破canvas語法限制,有很多的朋友可能還不相信,本文將詳細介紹如何讓canvas支持鏈式語法,需要了解的朋有可以參考下

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

代碼如下:

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原生語法不爽的有兩點:1是每句前面都有寫ctx(即canvas的context2d對象),2是每個函數或屬性都要占一行,浪費空間。

我對jQuery的鏈式語法很欣賞,比如:

代碼如下:

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

所以,我也想用這種語法來進行canvas繪圖:

代碼如下:

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

有個辦法就是模擬一個context2d對象,這個對象支持所有的原生context2d方法,但又支持鏈式。

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

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

代碼如下:

// 讓canvas支持鏈式語法,來自十年燈

~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一樣使用,但不同的是,他支持鏈式語法了:

代碼如下:

var cvs = document.getElementById('cvs');

var ctx = XtendCanvas(cvs);

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

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

這段代碼并不是對canvas的增強,只是單純的讓他支持鏈式語法了。但勝在代碼少,可以嵌入到任何JS庫中,在此我希望能得到你的一個“推薦”

代碼中肯定有值得改進的地方,大家可以自行完善。但——吃水不忘挖井人,希望大家記得我,最重要的是思路,對吧?下面就是思路:

大家可以看到,代碼中最長的部分,是那個保存方法名的數組pro,核心代碼反而很短。為什么我要建這么一個數組呢?

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

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

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

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

這樣大家在碰到設置canvas屬性的時候,就不用中斷鏈了,直接把屬性值當參數傳進去就行了,比如:

代碼如下:

ctx.strokeStyle('#f00')

最后,關鍵的關鍵,就是返回fn,這招是從jQuery學來的,是支持鏈式語法的關鍵。

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

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

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

我也把那一串set函數給放出來吧:

代碼如下:

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

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

更多信息請查看網頁制作
由于各方面情況的不斷調整與變化,易賢網提供的所有考試信息和咨詢回復僅供參考,敬請考生以權威部門公布的正式信息和咨詢為準!

2026上岸·考公考編培訓報班

  • 報班類型
  • 姓名
  • 手機號
  • 驗證碼
關于我們 | 聯系我們 | 人才招聘 | 網站聲明 | 網站幫助 | 非正式的簡要咨詢 | 簡要咨詢須知 | 新媒體/短視頻平臺 | 手機站點 | 投訴建議
工業和信息化部備案號:滇ICP備2023014141號-1 云南省教育廳備案號:云教ICP備0901021 滇公網安備53010202001879號 人力資源服務許可證:(云)人服證字(2023)第0102001523號
云南網警備案專用圖標
聯系電話:0871-65099533/13759567129 獲取招聘考試信息及咨詢關注公眾號:hfpxwx
咨詢QQ:1093837350(9:00—18:00)版權所有:易賢網
云南網警報警專用圖標
中文字幕免费精品_亚洲视频自拍_亚洲综合国产激情另类一区_色综合咪咪久久
欧美va亚洲va日韩∨a综合色| 国模私拍一区二区三区| 免费黄网站欧美| 国产精品福利在线观看网址| 国产精品v亚洲精品v日韩精品 | 国产在线播精品第三| 亚洲在线电影| 亚欧美中日韩视频| 欧美黄色免费网站| 国产精品一区二区三区久久久 | 亚洲全黄一级网站| 亚洲欧洲一区二区三区久久| 亚洲国产精品毛片| 亚洲一区999| 欧美亚洲免费| 久久综合色一综合色88| 久久狠狠亚洲综合| 蜜桃av久久久亚洲精品| 蜜桃精品久久久久久久免费影院| 麻豆精品视频在线观看| 欧美14一18处毛片| 欧美午夜电影在线| 国产日韩欧美精品在线| 欧美成人r级一区二区三区| 免费在线看成人av| 欧美日韩第一区日日骚| 国产精品国产精品国产专区不蜜| 精品91在线| 欧美在线精品一区| 国产精品xxxxx| 国产日韩一区欧美| 亚洲性视频h| 欧美日韩中文字幕综合视频| 一区二区三区我不卡| 欧美影院一区| 国产精品久久久久9999| 欧美ab在线视频| 夜夜嗨av一区二区三区| 麻豆成人在线播放| 国产又爽又黄的激情精品视频| 亚洲成人在线网| 亚洲三级免费观看| 欧美精品观看| 在线观看一区二区视频| 久久久久久久性| 亚洲国产你懂的| 欧美一级专区免费大片| 亚洲精品一品区二品区三品区| 欧美在线观看一区二区| 欧美不卡在线| 亚洲黑丝在线| 国产精品magnet| 久久精品2019中文字幕| 欧美日韩高清不卡| 影音先锋中文字幕一区二区| 亚洲一区二区三区色| 国产精品成人免费视频| 在线一区二区视频| 欧美激情国产日韩| 一本大道久久a久久综合婷婷| 国产精品免费久久久久久| 亚洲一区自拍| 美女国产一区| 免费观看日韩av| 日韩一级不卡| 一区二区三区自拍| 午夜精品久久久久久久男人的天堂| 欧美日韩国产首页在线观看| 亚洲综合日韩| 国产综合视频| 久久精品久久综合| 亚洲自拍16p| 一区在线视频观看| 欧美午夜a级限制福利片| 国产欧美一二三区| 国产精品一区久久久久| 欧美肥婆在线| 久久一日本道色综合久久| 亚洲电影自拍| 日韩网站在线| 国色天香一区二区| 国产精品夜夜夜| 国模套图日韩精品一区二区| 欧美精品一区二区三区蜜臀| 久久亚洲精品一区二区| 久久综合久久综合久久| 免费观看久久久4p| 欧美黄色影院| 国产精品久久国产精品99gif| 玖玖精品视频| 国产日韩成人精品| 国产农村妇女精品一二区| 欧美久久久久久久| 欧美精品免费视频| 国产精品欧美久久久久无广告| 欧美日韩成人一区二区| 欧美精彩视频一区二区三区| 宅男在线国产精品| 亚洲午夜激情网页| 欧美亚洲免费电影| 久久精品一区二区| 欧美日韩国产一区二区三区地区 | 老司机精品导航| 久久精品久久综合| 久久久久免费| 久久午夜国产精品| 欧美日韩一区高清| 在线精品国精品国产尤物884a| 亚洲精品日韩综合观看成人91| 亚洲高清激情| 99re66热这里只有精品4| 久久精品91| 欧美视频一区在线| 国产一区在线免费观看| 中文日韩在线视频| 国产精品乱码妇女bbbb| 国产精品夜夜嗨| 亚洲国产成人不卡| 亚洲精品国产精品国自产在线 | 国产精品女主播| 欧美久久视频| 国产日韩精品一区二区三区| 亚洲经典视频在线观看| 久久性天堂网| 国产精品三区www17con| 激情五月***国产精品| 亚洲性夜色噜噜噜7777| 国产精品高潮呻吟| 亚洲性色视频| 国产精品视频在线观看| 亚洲午夜羞羞片| 国产亚洲在线观看| 一本久久综合亚洲鲁鲁| 久久精品视频亚洲| 国产欧美精品一区| 蜜月aⅴ免费一区二区三区| 在线看欧美视频| 欧美大片在线观看一区| 亚洲国产精品悠悠久久琪琪| 国产精品中文字幕欧美| 亚洲欧美日韩一区| 国产精品美女久久久久av超清| 一区二区三区久久久| 国产毛片精品国产一区二区三区| 香蕉久久一区二区不卡无毒影院 | 欧美日韩另类字幕中文| 狠狠色香婷婷久久亚洲精品| 久久精品国产久精国产思思| 国产精品久久久久久久9999 | 欧美激情精品久久久六区热门 | 久久综合五月天婷婷伊人| 亚洲美女精品成人在线视频| 国产美女精品| 久久久久一本一区二区青青蜜月| 欧美精品久久久久久| 亚洲一区二区在线免费观看视频| 亚洲第一精品夜夜躁人人爽| 欧美国产先锋| 欧美 日韩 国产 一区| 久久国产精品亚洲va麻豆| 国精产品99永久一区一区| 在线成人黄色| 亚洲欧美国内爽妇网| 雨宫琴音一区二区在线| 欧美超级免费视 在线| 欧美一级在线播放| 亚洲精品之草原avav久久| 国产伦精品一区二区三区视频孕妇 | 日韩午夜电影av| 亚洲国产专区| 黑人巨大精品欧美黑白配亚洲| 欧美精品国产| 欧美h视频在线| 欧美激情中文不卡| 欧美精品粉嫩高潮一区二区| 免费一级欧美片在线观看| 一区二区三区色| 亚洲激情亚洲| 亚洲国产欧美国产综合一区| 亚洲国产精品视频一区| 欧美精品日日鲁夜夜添| 国产一区在线免费观看| 亚洲国产成人porn| 亚洲国产高清视频| 亚洲麻豆视频| 国产精品拍天天在线| 伊人精品视频| 一区二区三区国产在线观看| 中文精品在线| 久久精品国产一区二区三| 男女精品网站| 免费人成精品欧美精品| 中文欧美字幕免费| 一区二区日韩精品| 欧美一区二区三区精品| 美女国产一区| 国产私拍一区| 国产欧美日韩另类视频免费观看| 国产一区二区三区精品久久久 | 尤物在线观看一区|