Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/matlab/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何在舞台上缩放图层?_Javascript_Kineticjs - Fatal编程技术网

Javascript 如何在舞台上缩放图层?

Javascript 如何在舞台上缩放图层?,javascript,kineticjs,Javascript,Kineticjs,我想在我的应用程序中添加缩放功能。我使用了Kinetic js,在某处我找到了该功能的解决方案,但由于某些原因,我无法应用这些解决方案。我试图调整解决方案,但没有成功。我有很多动态图层,其中一些会在缩放应用时缩放。我的挑战是:缩放将发生在鼠标位置上。我找到的解决方案是:缩放后的layer.setPosition()。正如我前面提到的,我不能使用“layer.setPosition”,我将使用stage.setPosition()来实现这一点,但我无法100%准确地计算位置的新x和y。有人能给我建


我想在我的应用程序中添加缩放功能。我使用了Kinetic js,在某处我找到了该功能的解决方案,但由于某些原因,我无法应用这些解决方案。我试图调整解决方案,但没有成功。我有很多动态图层,其中一些会在缩放应用时缩放。我的挑战是:缩放将发生在鼠标位置上。我找到的解决方案是:缩放后的layer.setPosition()。正如我前面提到的,我不能使用“layer.setPosition”,我将使用stage.setPosition()来实现这一点,但我无法100%准确地计算位置的新x和y。有人能给我建议一些解决方法吗?

缩放时您真正想做的是设置缩放比例

可以为任何图层、节点或整个舞台设置比例。只要做:

   layer1.setScale(2,2); // this doubles the layer size from the original
这不会影响任何其他层,因此覆盖层将保持不变

此外,您还应执行以下操作:

   layer1.setPosition(x,y); // this will move the layer to the fixed point you want.
总之,你可以做到:

   function zoom(){
       var position = stage.getUserPosition();
       layer1.setScale(2,2);
       layer1.setPosition(position.x - layer2.getX(), position.y - layer2.getY()); //move the layer by an offset based on the second layer. This isn't exactly correct so it's something you have to experiment with.
   }
看看这个:也许这就是你想要的,我不太明白这个问题

        var zoom = function(e) {
          var zoomAmount = 1;
          layer.setScale(layer.getScale().x+zoomAmount)
          layer.draw();
        }

        document.addEventListener("click", zoom, false)

只需单击任意位置即可缩放。您可以将“单击”事件侦听器附加到舞台/文档的任何部分。

这些答案似乎不适用于KineticJS 5.1.0。这些主要不适用于比例函数的特征变化:

 stage.setScale(newscale); --> stage.setScale({x:newscale,y:newscale});
但是,以下解决方案似乎适用于KineticJS 5.1.0:


JSFIDLE:

我不能清楚地理解这个问题。考虑改写更多的例子吗?还是只有我?