javascript – 将新的上下文添加到画布对象

我在javascript中创建一个图书馆,我想知道是否有一些方法可以在canvas中添加一种新的上下文,而不是2d

var ctx.document.getElementById('canvas').getContext("othercontext");

在那里我将创建一个具有所有正常的2D属性的其他文本,再加上一些.有没有办法做到这一点?

你不能完全这样做,但你可以钩住getContext方法并返回一个扩展的2D上下文,它具有额外的属性和方法:

(function() {
    // save the old getContext function
    var oldGetContext = HTMLCanvasElement.prototype.getContext;

    // overwrite getContext with our new function
    HTMLCanvasElement.prototype.getContext = function(name) {
        // if the canvas type requested is "othercontext",
        // augment the 2d canvas before returning it
        if(name === "othercontext") {
            var plainContext = oldGetContext.call(this, "2d");
            return augment2dContext(plainContext);
        } else {
            // get the original result of getContext
            return oldGetContext.apply(this, arguments);
        }
    }

    // add methods to the context object
    function augment2dContext(inputContext) {
        inputContext.drawSmileyFace = function() { /* ... */ };
        inputContext.drawRandomLine = function() { /* ... */ };
        inputContext.eraseStuff = function() { /* ... */ };
        return inputContext;
    }
})();

因此,调用someCanvas.getContext(“othercontext”).drawSmileyFace()将调用已添加到普通2D上下文返回值getContext(“2d”)的drawSmileyFace.

但是,我建议在实际部署的代码中建议使用此模式,因为:

>您的上下文名称可能以后可能由浏览器本机实现,您的覆盖getContext将会阻止上下文类型的访问
>更一般来说,它通常是bad practice to extend functionality of host objects像DOM元素,因为主机对象可以(但通常不会)抛出错误在完美的普通操作,如属性访问

http://stackoverflow.com/questions/16609761/add-new-contexts-to-canvas-objects

本站文章除注明转载外,均为本站原创或编译
转载请明显位置注明出处:javascript – 将新的上下文添加到画布对象