canvas教程

Html[网页基础],html5语法,让canvas支持jQuery式的链式语法,adm

字号+ 作者:H5之家 来源:H5之家 2015-11-22 17:16 我要评论( )

Html[网页基础],admin,html5语法,让canvas支持jQuery式的链式语法,让canvas支持jQuery式的链式语法,

本广告位招商中!联系邮箱heiqu8#163.com,将#替换为@...

让canvas支持jQuery式的链式语法

这里的canvas是指html5 中的canvas,如有雷同,恕不解释。

文章更新:

2013.08.28:

此次更新是修复上一次更新的遗留问题,即”有返回值的函数无法得到正确的返回值”,比如getImageData,isPointInPath等,这个问题是因为为了实现链式语法,函数会总是返回this.其实要修复这个问题是很简单的,就是判断函数执行后是否有返回值,有的话就返回这个返回值,没有就继续返回this(大多数情况下都没有).

不过由于这个判断的原因,可能会对整体效率有那么一点点的影响;而且,有返回值的函数的后面,不能继续链式语法.

另外我把原来的用来放函数名的数组变成了一个字符串,因为这样可以少写很多引号.

12345678910111213141516171819202122var XtendCanvas = 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,clearShadow,fillText,strokeText,strokeRect,drawImage,drawImageFromRect,putImageData,createPattern,createImageData,textBaseLine,strokeStyle,lineWidth,globalAlpha,fillStyle,font,shadowOffsetX,shadowOffsetY,shadowBlur,shadowColor,lineCap,lineJoin,miterLimit,getImageData,isPointInPath'.split(',');    function fn (canvas) {        this.context = canvas.getContext('2d');    }    var old = document.createElement('CANVAS').getContext('2d');    for(var i = 1,p=pro[0];p;p=pro[i++]) {        // console.log(i +' >> '+ p + ' >> ' + typeof CanvasRenderingContext2D.prototype[p]);        fn.prototype[p] = function  (p) {             return (typeof old[p] === 'function') ? function  () {                    var r = this.context[p].apply(this.context,arguments);                    return r === undefined ? this : r;                } : function  () {                    this.context[p] = Array.prototype.join.call(arguments);                    return this;                };        }(p);    }      return function  (canvas) {        return new fn(canvas);    };   }()

2013.03.19:

优化了XtendCanvas结构,数组中去掉了一些没必要存在的函数(如isPointInPath),修复了Firefox下报错的问题,并尽量减少了判断与循环的次数:

123456789101112131415161718192021222324var XtendCanvas = 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',  'measureText', 'clearShadow', 'fillText', 'strokeText',   'strokeRect', 'drawImage', 'drawImageFromRect',  'putImageData', 'createPattern', 'createImageData', 'getImageData','textBaseLine','strokeStyle','lineWidth','globalAlpha','fillStyle','font','shadowOffsetX','shadowOffsetY','shadowBlur','shadowColor','lineCap','lineJoin','miterLimit'];    function fn (canvas) {        this.context = canvas.getContext('2d');    }    var old = document.createElement('CANVAS').getContext('2d');    for(var i = 1,p=pro[0];p;p=pro[i++]) {        // console.log(i +' >> '+ p + ' >> ' + typeof CanvasRenderingContext2D.prototype[p]);        fn.prototype[p] = function  (p) {             return (typeof old[p] === 'function') ? function  () {                    this.context[p].apply(this.context,arguments);                    return this;                } : function  () {                    this.context[p] = Array.prototype.join.call(arguments);                    return this;                };        }(p);    }      old = null;    return function  (canvas) {        return new fn(canvas);    };    }()

 

1.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源;2.本站的原创文章,请转载时务必注明文章作者和来源,不尊重原创的行为我们将追究责任;3.作者投稿可能会经我们编辑修改或补充。

相关文章
网友点评