繁体   English   中英

使用多层时,KineticJS / Canvas在ipad上使safari崩溃?

[英]KineticJS/Canvas makes safari crash on ipad when using multiple layers?

这真让我抓狂。 如果我在下面运行简单的HTML,它将在我的IPad2(A1396)上运行,而不在我的IPad 3(A1416)上运行。 每当我将iPad 3从纵向旋转到横向时,Safari都会崩溃。 我看起来添加的层数与(每层的)宽度/高度之间存在关系。

<!DOCTYPE HTML>
<html>
  <head>
    <style>
      body {
        margin: 0px;
        padding: 0px;
      }
    </style>
  </head>
  <body>
    <div id="container"></div>
    <script src="http://d3lp1msu2r81bx.cloudfront.net/kjs/js/lib/kinetic-v5.0.2.min.js"></script>
    <script defer="defer">
        var stage = new Kinetic.Stage({
            container: 'container',
            width: 580,
            height: 400
        });
        var NrOfAttribute = 50;
        for (var AttributeNo = 0, NrOfAttribute; AttributeNo < NrOfAttribute; AttributeNo++) {
            var layer = new Kinetic.Layer();

            var rect = new Kinetic.Rect({
                x: 20*AttributeNo,
                y: 20*AttributeNo,
                width: 50,
                height: 10,
                fill: 'green',
                stroke: 'black',
                strokeWidth: 4
            });

            // add the shape to the layer
            layer.add(rect);

            // add the layer to the stage
            stage.add(layer);
        }
    </script>
  </body>
</html>

这是iPad上的错误还是某些内存问题? 任何帮助将不胜感激,因为我真的需要这个工作。

谢谢!

编辑:我刚刚测试过对“常规” Canvas进行相同的操作,并且如果我增加了层数,它也会崩溃(因此它似乎不是动力学特定的)。 如果您增加足够的层数,它也会在Ipad2上崩溃。

这可能不是您的选择,但是每个Rect是否需要一个单独的图层,还是可以将它们全部放在同一图层中? 我怀疑这将有助于减少内存使用,因为您最终不会获得50个canvas元素。 您可以为每个Rect赋予唯一的name ,然后仍然可以使用rect = layer.find('.{name}'); # do something with rect东西分别对其进行操作rect = layer.find('.{name}'); # do something with rect rect = layer.find('.{name}'); # do something with rect

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM