亚洲免费不卡_在线视频精品_国产尤物精品_久久久久网址_久久精品91_欧美va天堂在线_狠狠入ady亚洲精品_亚洲午夜精品福利_国产精品草草_午夜精品久久99蜜桃的功能介绍

突破canvas語法限制 讓他支持鏈式語法
來源:易賢網 閱讀:2473 次 日期: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數組中。

更多信息請查看網頁制作
由于各方面情況的不斷調整與變化,易賢網提供的所有考試信息和咨詢回復僅供參考,敬請考生以權威部門公布的正式信息和咨詢為準!
關于我們 | 聯系我們 | 人才招聘 | 網站聲明 | 網站幫助 | 非正式的簡要咨詢 | 簡要咨詢須知 | 新媒體/短視頻平臺 | 手機站點

版權所有:易賢網

亚洲免费不卡_在线视频精品_国产尤物精品_久久久久网址_久久精品91_欧美va天堂在线_狠狠入ady亚洲精品_亚洲午夜精品福利_国产精品草草_午夜精品久久99蜜桃的功能介绍
性欧美xxxx大乳国产app| 精品1区2区| 久久精品午夜| 美女爽到呻吟久久久久| 欧美亚洲免费在线| 午夜影院日韩| 久久一区中文字幕| 欧美不卡福利| 国产一区二区中文字幕免费看| 另类图片国产| 午夜国产精品视频| 好看的av在线不卡观看| 一区二区三区国产盗摄 | 国产亚洲综合精品| 亚洲欧美久久久| 亚洲欧美日韩在线观看a三区| 亚洲专区欧美专区| 久久国产精品久久精品国产| 欧美一区二区| 韩国一区二区三区在线观看| 亚洲国产精品第一区二区三区| 亚洲国产一区二区三区高清 | 免费一区二区三区| 一本久久综合| 久久国产99| 亚洲免费影院| 午夜激情一区| 亚洲丰满在线| 午夜一区二区三区不卡视频| 欧美成人首页| 亚洲欧洲一二三| 久久福利一区| 亚洲私拍自拍| 美日韩精品免费| 国产精品porn| 国产精品视频福利| 国内揄拍国内精品久久| 一本综合精品| 国内久久视频| 亚洲欧美日产图| 伊人成人在线| 欧美成人一品| 99热这里只有成人精品国产| 久久精品亚洲| 一级日韩一区在线观看| 可以免费看不卡的av网站| 亚洲国产国产亚洲一二三| 另类国产ts人妖高潮视频| 亚洲高清成人| 国产精品www994| 性一交一乱一区二区洋洋av| 精品不卡视频| 欧美婷婷久久| 女同性一区二区三区人了人一| 日韩午夜av在线| 亚洲视频日本| 国产精品红桃| 欧美欧美天天天天操| 一区二区三区精品视频在线观看| 欧美va天堂在线| 久久综合久久久| 西西人体一区二区| 国产精品永久| 亚洲免费婷婷| 久久福利精品| 久久亚洲精品欧美| 麻豆精品视频| 久久久蜜桃一区二区人| 久久经典综合| 久久婷婷麻豆| 欧美日韩高清免费| 欧美日韩91| 国产一区美女| 久久九九99| 欧美在线黄色| 国内精品久久久久国产盗摄免费观看完整版| 老鸭窝毛片一区二区三区| 国产欧美一级| 亚洲国产精品www| 亚洲国产精品毛片| 一区二区91| 在线日韩av永久免费观看| 在线午夜精品| 日韩一级不卡| 国产精品久久久免费| 亚洲精品社区| 国产视频不卡| 午夜一级久久| 欧美欧美天天天天操| 午夜性色一区二区三区免费视频 | 在线观看成人av| 亚洲福利电影| 午夜影院日韩| 美女尤物久久精品| 国产精品乱看| 美女日韩在线中文字幕| 欧美日韩天天操| 日韩视频久久| 欧美精品福利| 国产一区二区三区的电影| 久久久久se| 亚洲欧洲日本一区二区三区| 亚洲一卡久久| 韩国亚洲精品| 香蕉精品999视频一区二区| 久久综合九色综合久99| 亚洲经典在线看| 久久久久国内| 午夜久久福利| 国产精品综合色区在线观看| 午夜一区二区三区不卡视频| 国产在线成人| 久久美女性网| 国产日韩精品久久| 狠狠色狠狠色综合人人| 99精品欧美一区二区三区| 久久蜜桃精品| 制服诱惑一区二区| 亚洲视频碰碰| 久久精品午夜| 韩国亚洲精品| 午夜精品久久| 午夜在线精品偷拍| 在线一区亚洲| 在线成人av| 欧美日韩综合另类| 女主播福利一区| 午夜影院日韩| 国产一区91| av成人国产| 亚洲国产欧洲综合997久久| 久久久精品性| 性8sex亚洲区入口| 国产伦精品一区二区三区| 日韩亚洲不卡在线| 亚洲精品系列| 亚洲精品男同| 亚洲性感美女99在线| 欧美日韩免费观看一区=区三区| 午夜亚洲影视| 久久国产88| 美女日韩在线中文字幕| 亚洲午夜av| 韩日欧美一区| 伊甸园精品99久久久久久| 狠狠色综合网站久久久久久久| 欧美区一区二| 欧美视频一区| 激情文学一区| 亚洲黄色成人| 中文精品在线| 国产人成精品一区二区三| 欧美激情一级片一区二区| 老妇喷水一区二区三区| 欧美成人国产| 在线观看的日韩av| 亚洲开发第一视频在线播放| 国产精品久久久久毛片大屁完整版| 在线观看亚洲视频啊啊啊啊| 亚洲欧洲一区二区天堂久久| 影音先锋国产精品| 国产日韩久久| 久久这里有精品15一区二区三区| 欧美777四色影| 极品中文字幕一区| 亚洲欧美日韩视频二区| 久久精品导航| 悠悠资源网久久精品| 亚洲免费播放| 久久激情综合| 玖玖国产精品视频| 亚洲大片在线| 久久久人人人| 欧美精品激情| 国产日韩欧美在线播放不卡| 亚洲欧美综合国产精品一区| 一区二区三区久久网| 午夜视频久久久| 久久不射2019中文字幕| 亚洲黄色精品| 狠狠色综合网站久久久久久久| 蘑菇福利视频一区播放| 在线视频精品一区| 亚洲高清资源| 精品不卡在线| 一区免费在线| 亚洲无毛电影| 欧美色综合网| 欧美日韩三区四区| 欧美日韩国产探花| 欧美日韩国产成人精品| 久久人人97超碰人人澡爱香蕉| 国产色综合网| 午夜一区二区三区不卡视频| 日韩视频一区| 国产欧美一区二区三区另类精品 | 尤物在线精品| 国产精品九九| 在线成人www免费观看视频| 欧美日韩视频在线一区二区观看视频| 久久一综合视频| 欧美日韩三级| 国产精品99一区二区| 国内成+人亚洲| 亚洲精华国产欧美| 99视频精品| 亚洲欧美国产精品桃花| 久久黄色网页| 欧美视频一区| 亚洲美女少妇无套啪啪呻吟| av不卡免费看| 鲁大师成人一区二区三区| 久久久久国产精品午夜一区| 久久久亚洲人| 欧美日韩18| 亚洲精品在线视频观看| 国产精品有限公司| 欧美阿v一级看视频| 国产在线日韩| 国产精品综合| 欧美日韩国产色综合一二三四| 韩国av一区| 国产伦一区二区三区色一情| 欧美一区二区三区久久精品茉莉花| 欧美性久久久| 国产亚洲永久域名| 欧美久久在线| 国产日韩欧美一区二区| 欧美国产91| 在线一区亚洲| 欧美国产91| 一区二区激情| 国产精品a久久久久| 国产日韩精品久久| 国产精品mm| 国产精品日韩欧美一区二区| 欧美一区免费| 国产欧美一区二区色老头| 欧美福利电影在线观看| 99精品国产99久久久久久福利| 亚洲女人av| 亚洲黄色大片| 欧美日韩国产一区精品一区| 国产欧美日韩一级| 激情一区二区三区| 午夜精品区一区二区三| 国产精品美女诱惑| 亚洲国产影院| 国内精品久久久久久久影视蜜臀 | 国产欧美日本在线| 红桃视频欧美| 欧美日韩福利| 久久久久成人精品免费播放动漫| 亚洲三级网站| 在线视频国内自拍亚洲视频| 欧美日韩精品免费观看视频完整| 亚洲欧美日韩另类精品一区二区三区 | 国产综合自拍| 欧美激情偷拍| 久久亚洲风情| 久久精品国产第一区二区三区最新章节| 亚洲国产精品第一区二区| 欧美三级午夜理伦三级中文幕| 麻豆精品视频| 美女尤物久久精品| 噜噜噜91成人网| 性色一区二区三区| 国产精品久久亚洲7777| 亚洲精品乱码久久久久久蜜桃91| 国产一区日韩一区| 国内激情久久| 欧美精品导航| 欧美日韩a区| 久久综合九色| 你懂的网址国产 欧美| 亚洲欧美日韩在线观看a三区| 日韩一级网站| 国产精品夜夜夜| 久久大逼视频| 欧美91视频| 亚洲午夜91| 9国产精品视频| 香蕉成人久久| 欧美黄免费看| 激情偷拍久久| 一二三区精品| 久久国产日韩| 好吊一区二区三区| 国产日韩一区二区三区在线播放| 亚洲一区综合| 欧美日韩一区二区三| 在线日本高清免费不卡| 一区二区三区四区五区精品视频| 国产精品一区毛片| 欧美久久影院| 亚洲精选久久| 久久久久看片| 亚洲第一精品影视| 模特精品在线| 亚洲欧洲综合| 久久亚洲美女| 一本一本a久久| 黄色日韩精品| 久久综合狠狠| 99精品免费视频| 欧美色123| 免费在线成人av| 99精品国产在热久久| 欧美激情日韩| 午夜亚洲影视| 亚洲精品一区二区三区樱花| 欧美精品aa| 国产一区清纯| 亚洲欧美日韩综合国产aⅴ| 欧美久久九九| 欧美综合二区| 一区二区三区国产在线| 欧美三区不卡| 久久久久se| 国产三级精品在线不卡| 狠狠色综合网站久久久久久久| 国产一区二区三区奇米久涩| 欧美日本不卡高清| 久久久久久久久久久一区| 亚洲理伦在线| 亚洲成人资源| 狠狠噜噜久久| 国内精品亚洲| 国产一区激情| 午夜精品电影| 老司机午夜精品视频| 亚洲免费中文| 国产农村妇女精品一区二区| 亚洲国产精品视频一区| 国产精品地址| 国内精品久久国产| 国产一区自拍视频| 欧美日韩综合网| 欧美黄污视频| 老妇喷水一区二区三区| 国产精品日韩一区二区| 亚洲国产二区| 一区在线免费| 欧美一区二区三区久久精品茉莉花 | 男女精品视频| 狠狠久久婷婷| 欧美激情自拍| 欧美日韩国产色综合一二三四| 国产精品一区二区在线观看 | 欧美日韩在线高清| 麻豆av一区二区三区久久| 亚洲人成高清| 国产欧美91| 亚洲精品影院在线观看| 在线免费高清一区二区三区| 欧美福利视频| 欧美1区2区3区| 国产综合网站| 欧美性久久久| 在线天堂一区av电影| 亚洲激情网站| 欧美另类高清视频在线| 欧美日韩综合精品| 国产精品啊啊啊| 亚洲免费大片| 一本一本久久| 久久av最新网址| 免费久久99精品国产自| 国产精品久久久久久久久婷婷| 亚洲一区二区精品在线观看| 国产日韩精品久久| 亚洲欧美综合| 狠狠爱综合网| 欧美激情综合色综合啪啪| 在线观看欧美一区| 日韩一级在线| 女人香蕉久久**毛片精品| 老司机精品导航| 亚洲精品无人区| 国产欧美一区二区色老头| 国产精品一级久久久| 欧美三区在线| 伊人激情综合| 美女久久一区| 午夜精品av| 亚洲综合好骚| 欧美大片一区| 久久久水蜜桃| 亚洲深夜av| 葵司免费一区二区三区四区五区| 亚洲三级影院| 久久激情中文| 亚洲精品1区2区| 亚洲欧美久久久久一区二区三区| 久久一区欧美| 伊人成人在线视频| 国产毛片一区| 99精品国产福利在线观看免费| 亚洲欧美久久久| 一区二区国产在线观看|