婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av

主頁 > 知識庫 > 突破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數組中。

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

標簽:廣東 松原 果洛 阿克蘇 蚌埠 常德 廣西 鄂爾多斯

巨人網絡通訊聲明:本文標題《突破canvas語法限制 讓他支持鏈式語法》,本文關鍵詞  突破,canvas,語法,限制,讓他,;如發現本文內容存在版權問題,煩請提供相關信息告之我們,我們將及時溝通與處理。本站內容系統采集于網絡,涉及言論、版權與本站無關。
  • 相關文章
  • 下面列出與本文章《突破canvas語法限制 讓他支持鏈式語法》相關的同類信息!
  • 本頁收集關于突破canvas語法限制 讓他支持鏈式語法的相關信息資訊供網民參考!
  • 推薦文章
    婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av
    91精品国产丝袜白色高跟鞋| 欧美性色黄大片手机版| 国产综合一区二区| 欧美电影影音先锋| 亚洲日本在线天堂| proumb性欧美在线观看| 国产日产欧产精品推荐色| 久久精品国产一区二区三区免费看| 色一区在线观看| 亚洲综合色噜噜狠狠| 欧美婷婷六月丁香综合色| 视频一区欧美精品| 7777女厕盗摄久久久| 久久精品噜噜噜成人88aⅴ| 久久一区二区三区四区| 国产精品一区久久久久| 久久久久久久综合日本| 国产成人午夜精品影院观看视频| 久久精品日产第一区二区三区高清版| 韩国av一区二区三区四区| 中文字幕va一区二区三区| 99亚偷拍自图区亚洲| 一区二区三区四区在线| 欧美一区二区三区视频| 国产永久精品大片wwwapp| 国产精品久久久久久久岛一牛影视 | 毛片av一区二区三区| 久久老女人爱爱| av高清久久久| 视频一区二区国产| 欧美成人艳星乳罩| 国产69精品一区二区亚洲孕妇| 自拍偷拍亚洲欧美日韩| 色八戒一区二区三区| 天天射综合影视| 国产精品免费人成网站| 777午夜精品免费视频| 免费看欧美美女黄的网站| 久久99国产精品尤物| 国产视频一区二区在线| 欧美日韩精品电影| 丁香婷婷深情五月亚洲| 三级影片在线观看欧美日韩一区二区| 久久免费美女视频| 欧美日本在线视频| 成人永久免费视频| 久久精品久久久精品美女| 亚洲色图视频网站| 久久久www免费人成精品| 欧洲视频一区二区| 不卡的看片网站| 久久99国产乱子伦精品免费| 洋洋成人永久网站入口| 国产日韩欧美精品一区| 欧美成人激情免费网| 欧美亚男人的天堂| 日本韩国一区二区三区| av亚洲精华国产精华精| 国产iv一区二区三区| 国产一区日韩二区欧美三区| 青青草精品视频| 亚洲h精品动漫在线观看| 一区二区三区在线视频免费| 中文字幕av一区二区三区免费看| 2023国产精品自拍| 精品美女在线播放| 精品国产乱码久久久久久影片| 欧美挠脚心视频网站| 欧美日韩综合在线| 欧美日韩一级片在线观看| 欧美午夜一区二区三区免费大片| 在线精品视频免费观看| 欧美私人免费视频| 在线中文字幕一区| 欧美在线一区二区| 欧美日韩高清一区| 日韩你懂的电影在线观看| 在线不卡欧美精品一区二区三区| 欧美电影一区二区| 91精品国产综合久久婷婷香蕉| 在线不卡a资源高清| 欧美sm美女调教| 亚洲国产精品99久久久久久久久 | 亚洲福利视频一区二区| 亚洲成人动漫精品| 麻豆久久久久久| 国产精品77777| 成人精品一区二区三区四区| 91香蕉视频污在线| 欧美日韩高清在线播放| 精品欧美一区二区三区精品久久| 亚洲精品在线三区| 欧美国产日韩一二三区| 亚洲男人电影天堂| 日韩制服丝袜av| 国产一区二区三区久久久| 成人综合日日夜夜| 欧美日本不卡视频| 久久久精品综合| 国产精品国产自产拍高清av王其| 亚洲日本丝袜连裤袜办公室| 午夜精品久久久久久久蜜桃app| 久久精品久久精品| 色诱视频网站一区| 欧美精品一区二区三区高清aⅴ| 国产精品初高中害羞小美女文| 亚洲国产一二三| 国产一区激情在线| 欧美日韩视频不卡| 国产欧美精品一区aⅴ影院| 夜夜亚洲天天久久| 成人综合激情网| 日韩美女在线视频 | 日韩一区有码在线| 天堂在线一区二区| 色综合色综合色综合 | 欧美激情艳妇裸体舞| 午夜久久久久久| 国产成人午夜99999| 欧美男男青年gay1069videost| 中文字幕亚洲一区二区av在线| 日本视频在线一区| 色噜噜狠狠色综合欧洲selulu| 亚洲自拍偷拍欧美| 国产精品一区三区| 精品久久久久久亚洲综合网| 亚洲第一福利一区| 94-欧美-setu| 国产日产欧美一区二区视频| 久久国产精品99精品国产| 欧美高清激情brazzers| 亚洲一区二区在线视频| av不卡一区二区三区| 久久久久高清精品| 国产精品亚洲第一区在线暖暖韩国| 欧美一区二区久久久| 亚洲18色成人| 欧美挠脚心视频网站| 午夜视黄欧洲亚洲| 777午夜精品免费视频| 亚洲大片精品永久免费| 欧美日韩一本到| 日韩电影在线看| 日韩欧美一级片| 韩国一区二区三区| 久久人人97超碰com| 国产精一品亚洲二区在线视频| 久久久久久电影| 成人综合在线视频| 一区av在线播放| 欧美日韩二区三区| 日韩高清不卡一区| 日韩女同互慰一区二区| 国产麻豆91精品| 国产精品理论片在线观看| jlzzjlzz国产精品久久| 亚洲激情在线激情| 欧美日韩国产大片| 久久99国产精品尤物| 国产日韩欧美电影| 在线观看一区不卡| 图片区小说区国产精品视频| 777亚洲妇女| 国产伦精品一区二区三区免费 | 在线国产亚洲欧美| 另类人妖一区二区av| 国产精品网站一区| 在线影院国内精品| 老司机午夜精品99久久| 国产日产欧产精品推荐色| 欧美在线观看视频一区二区三区| 亚洲成a人片在线观看中文| 精品精品欲导航| 不卡av在线免费观看| 亚洲电影在线免费观看| 久久日韩精品一区二区五区| 色综合中文字幕| 久久草av在线| 亚洲欧美国产三级| 欧美电影精品一区二区| 91在线观看免费视频| 免费久久精品视频| 亚洲精品老司机| 久久久久久久久久电影| 欧美日韩在线播放一区| 国产精品综合二区| 日日摸夜夜添夜夜添精品视频 | 亚洲精品福利视频网站| 欧美不卡激情三级在线观看| 99久精品国产| 激情综合色播五月| 亚洲欧美乱综合| 欧美激情综合在线| 日韩欧美成人激情| 欧美日韩国产在线观看| 91视频在线看| 国产99一区视频免费| 国产原创一区二区三区| 日韩成人av影视| 亚洲一区二区偷拍精品|