zrender如何实现path绘制?

把一个svg图像转成json用zrender绘制
把每个元素的属性啥的映射好

new zrender.Path.extend({
                    
                    shape: {
                        pathData: 路径,
                        id: node.shape.id,
                    },
                    style: {
                        fill: 'red',
                        stroke: 'red',
                        lineWidth: 1
                    }
                
                });

这样写绘制不出来,不知道这个实例的opt参数项,或者有没有直接绘制svg的

阅读 3.2k
2 个回答

<div class="example-container"></div>

<script>
window.onload = function() {
    var container = document.getElementsByClassName('example-container')[0];
    var zr = zrender.init(container);
    var path = new zrender.path.createFromString('M8 15A7 7 0 108 1a7 7 0 000 14zM4.5 8.2l.7-.7L7 9.3l3.8-3.8.7.7L7 10.7 4.5 8.2z')

    zr.add(path)

};
</script>

https://ecomfe.github.io/zrender-doc/public/api.html#zrenderp...

image.png
demo:

<!DOCTYPE html>
<html>

<head>
  <meta charset="utf-8" />
  <title>Pin</title>
  <script src="../dist/zrender.js"></script>
</head>

<body>
  <div id="main" style="width:1000px;height:500px;"></div>
  <script type="text/javascript">
    var zr = zrender.init(document.getElementById('main')); var Pin = zrender.Path.extend({
      type: 'pin', shape: { // x, y on the cusp 
        x: 0, y: 0, width: 0, height: 0
      },
      buildPath: function (path, shape) {
        var x = shape.x; var y = shape.y; var w = shape.width / 5 * 3; // Height must be larger than width
        var h = Math.max(w, shape.height); var r = w / 2; // Dist on y with tangent point and circle center 
        var dy = r * r / (h - r); var cy = y - h + r + dy; var angle = Math.asin(dy / r); // Dist on x with tangent point and circle center
        var dx = Math.cos(angle) * r; var tanX = Math.sin(angle); var tanY = Math.cos(angle); path.arc(x, cy, r, Math.PI - angle, Math.PI * 2 + angle); var cpLen = r * 0.6; var cpLen2 = r * 0.7; path.bezierCurveTo(x + dx - tanX * cpLen, cy + dy + tanY * cpLen, x, y - cpLen2, x, y); path.bezierCurveTo(x, y - cpLen2, x - dx + tanX * cpLen, cy + dy + tanY * cpLen, x - dx, cy + dy); path.closePath();
      }
    });
    var pin = new Pin({ shape: { x: 100, y: 100, width: 20, height: 40 }, scale: [2, 2] });
    zr.add(pin);
  </script>
</body>

</html>
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题