Kinetic JS图像放大镜
我试图遵循这个例子http://www.script-tutorials.com/html5-canvas-image-zoomer/
我收到以下错误:
Object doesn't support property or method 'getContext'
这是我的脚本:
stage = new Kinetic.Stage({ container: 'container', width: 512, height: 512 }); var layer = new Kinetic.Layer(); var imageObj = new Image(); imageObj.onload = function() { var yoda = new Kinetic.Image({ x: 0, y: 0, image: imageObj, width: 512, height: 512 }); layer.add(yoda); stage.add(layer); }; imageObj.src = "../../Content/images/notfound.png"; canvas = document.getElementById('container'); ctx = canvas.getContext('2d');
非常感谢您的建议,或者是Kinetic图像放大镜的示例。 提前致谢
当你执行以下操作时,它会获得托管kineticjs的div元素…它没有得到canvas。
canvas = document.getElementById('container');
这就是你对getContext
的调用失败的原因。
[编辑包含使用Kinetic自定义形状的放大示例]
我们可以使用Kinetic Shape对象,它允许我们进行自定义绘图。
我们可以在drawFunc
函数中自定义绘制任何东西,因为我们可以访问canvas上下文。
每次需要重绘自定义Shape时都会调用drawfunc
。
以下是轮廓forms的Kinetic自定义Shape对象:
zoomer = new Kinetic.Shape({ // The drawFunc lets us do custom drawings because are given the canvas drawFunc: function(canvas) { // We can use the canvas context var ctx = canvas.getContext(); ctx.beginPath(); // now we make any custom drawings // *** put custom drawing code here *** // but we must finish with this Kinetic-specific fillStroke(this) // to render the drawing (not optional!) canvas.fillStroke(this); } });
现在为一些zoomer细节。
首先,使用临时htmlcanvas以½分辨率创建图像的副本:
var canvas=document.createElement("canvas"); var ctx=canvas.getContext("2d"); canvas.width=image.width/2; canvas.height=image.height/2; ctx.drawImage(image, 0,0,image.width,image.height, 0,0,image.width/2,image.height/2);
在Shape的drawFunc
函数中,绘制一个包含半分辨率图像的矩形。
请注意, drawFunc
必须以canvas.fillStroke(this)
结束
canvas.fillStroke(this)
是一个特定于KineticJS的命令,用于渲染图形并且是必需的。
zoomer = new Kinetic.Shape({ drawFunc: function(canvas) { var ctx = canvas.getContext(); ctx.beginPath(); ctx.rect( 0,0, image.width/2, image.height/2 ); ctx.drawImage(halfCanvas,0,0); canvas.fillStroke(this); }, });
如果鼠标已关闭,还可以使用全尺寸图像的裁剪部分绘制缩放查看器。
if(this.MouseIsDown){ ctx.rect(mouseX,mouseY,viewerSize,viewerSize); ctx.drawImage(image, mouseX, mouseY, viewerSize, viewerSize, this.mouseX,this.mouseY, viewerSize, viewerSize); }
就是这样……请参阅下面的代码,了解一些细节和样式。
这是一个必须在Chrome或Mozilla中查看的小提琴(IE = CORS例外): http : //jsfiddle.net/m1erickson/dMr8g/
这是示例代码: