嵌套svg的D3.js缩放会中断Internet Explorer中的视口

高积云

我正在使用d3.js动态设置嵌套的svg,即嵌套在封闭的svg中的内部svg。一个d3.behavior.zoom()侦听在外SVG缩放事件并执行所需要的变革。

除了Internet Explorer(IE 11)似乎与涉及内部svgs的转换有关的问题外,其他所有方法都工作正常。Firefox和Chrome的行为均符合预期,将内部svg剪切到外部svg的视口中。但是,在Internet Explorer中,放大正确地应用了转换,但似乎忽略了封闭的svg的尺寸。内部svg的内容最终将显示在外部svg的外部以及其他主体元素的上方。外部svg的视口似乎对内部svg没有修剪效果。

我已经建立了一个JSFiddle来演示行为。

var zoom = d3.behavior.zoom()
    .on("zoom", function () {
        container.attr("transform",
            "translate(" + d3.event.translate + ") " +
            "scale(" + d3.event.scale + ")");
    });

var container = d3.select("body")
                    .append("svg")
                      .attr("id", "svgcontainer")
                      .attr("width", 300)
                      .attr("height", 300)
                      .style("background-color", "#aaaaee")
                      .call(zoom)
                    .append("g");

var svg = container.append("svg")
                     .attr("width", 200)
                     .attr("height", 200)
                     .attr("x", 50)
                     .attr("y", 50);

svg.append("svg:circle")
     .style("fill", "none")
     .style("stroke", "red")
     .style("stroke-width", "2px")
     .attr("cx", 100)
     .attr("cy", 100)
     .attr("r", 50);

我想念什么吗?有跨浏览器的解决方法吗?

阿米莉亚

抱歉,您首次发布该问题时没有引起足够的重视:它实际上是一个简单的解决方法。只需将overflow外部SVG属性设置为即可hidden

那么,为什么您的代码可以在其他浏览器上正常工作呢?

这是因为他们默认设置了此属性。overflowCSS中的的初始值为visible,但是SVG规范要求浏览器的默认样式表中viewBox必须包含可以带有属性的任何元素overflow:hidden根SVG元素除外其他浏览器将这种异常解释为仅适用于.svg文档<svg>根目录元素Internet Explorer还应用将HTML文档中的顶级内联SVG视为根(因此具有)。overflow: visible

下面的代码段演示了不同的行为。它在嵌入式SVG内的嵌套SVG内使用一个圆圈。该圆形对于嵌套的SVG太大,因此,如果嵌套SVG上隐藏了溢出(所有浏览器默认情况下),则该圆形将被裁剪为一个正方形。嵌套的SVG偏移,部分在外部SVG外部。如果外部SVG上隐藏了溢出,则嵌套的SVG将被裁剪为一个矩形;否则,SVG将被裁剪为一个矩形。如果可见溢出,您会看到正方形粘在框架外部。

第一个SVG在外部SVG上使用默认溢出(对于IE而言是不同的),而其他SVG则显式设置为overflow: hiddenoverflow: visible

svg {
    border: solid gray;
    height: 100px;
    width: 100px;
    margin: 50px;
}
circle {
    fill: royalBlue;
}
<svg>
    <svg x="-50" y="-50" width="100" height="100" >
        <circle r="100" cx="50" cy="50"/>
    </svg>
</svg>
<svg style="overflow: hidden">
    <svg x="-50" y="-50" width="100" height="100" >
        <circle r="100" cx="50" cy="50"/>
    </svg>
</svg>
<svg style="overflow: visible">
    <svg x="-50" y="-50" width="100" height="100" >
        <circle r="100" cx="50" cy="50"/>
    </svg>
</svg>

对于SVG 2SVG集成规范可能应该阐明溢出行为Firefox和Blink / Webkit浏览器之间在是否将嵌入式SVG上的填充视为“溢出”方面也存在差异。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

嵌套svg的D3.js缩放会中断Internet Explorer中的视口

来自分类Dev

如何基于视口缩放svg

来自分类Dev

d3:缩放圆包装中的svg图像

来自分类Dev

在d3.js v4缩放功能中,我遇到一个问题,当我缩小然后平移图表时会立即退出视口

来自分类Dev

将D3 SVG保存为高质量图像-视口案例

来自分类Dev

将D3 SVG保存为高质量图像-视口案例

来自分类Dev

如何在jquery-3中获取视口大小?

来自分类Dev

Angular-缩放在代码中创建的嵌入式d3 SVG

来自分类Dev

如何缩放我的 SVG 以适应其在 d3 中的容器 div 的大小?

来自分类Dev

d3在Firefox中的嵌套SVG图与Chrome中的图不同

来自分类Dev

d3嵌套SVG在firefox中的绘制与在Chrome中不同

来自分类Dev

[D3] [SVG]缩放至对象

来自分类Dev

[D3] [SVG]缩放至对象

来自分类Dev

表中的SVG无法在Internet Explorer中缩放

来自分类Dev

如何将一堆svg元素缩放到视口的100%

来自分类Dev

svg路径中的d3 js三角形

来自分类Dev

d3.js v4 将视口移动到特定节点

来自分类Dev

Flash AS3 | 创建摄影机/移动视口/缩放

来自分类Dev

使用C ++在Qt3D中创建多个视口时出现问题

来自分类Dev

为什么我仍然可以在iOS 7中缩放视口

来自分类Dev

响应视口,在div#wrapper中按比例缩放四列(保持纵横比)

来自分类Dev

如何在Webview中获取缩放的视口的宽度和高度?

来自分类Dev

响应视口,在div#wrapper中按比例缩放四列(保持纵横比)

来自分类Dev

如何缩放/移动相机以在Cesium.js中显示多边形(使视口适应多边形边界)

来自分类Dev

d3 SVG中的Angular指令

来自分类Dev

D3 SVG中的选择

来自分类Dev

缩放图像以最适合视口

来自分类Dev

基于设备的不同<meta>视口缩放?

来自分类Dev

按比例缩放div以适合视口

Related 相关文章

  1. 1

    嵌套svg的D3.js缩放会中断Internet Explorer中的视口

  2. 2

    如何基于视口缩放svg

  3. 3

    d3:缩放圆包装中的svg图像

  4. 4

    在d3.js v4缩放功能中,我遇到一个问题,当我缩小然后平移图表时会立即退出视口

  5. 5

    将D3 SVG保存为高质量图像-视口案例

  6. 6

    将D3 SVG保存为高质量图像-视口案例

  7. 7

    如何在jquery-3中获取视口大小?

  8. 8

    Angular-缩放在代码中创建的嵌入式d3 SVG

  9. 9

    如何缩放我的 SVG 以适应其在 d3 中的容器 div 的大小?

  10. 10

    d3在Firefox中的嵌套SVG图与Chrome中的图不同

  11. 11

    d3嵌套SVG在firefox中的绘制与在Chrome中不同

  12. 12

    [D3] [SVG]缩放至对象

  13. 13

    [D3] [SVG]缩放至对象

  14. 14

    表中的SVG无法在Internet Explorer中缩放

  15. 15

    如何将一堆svg元素缩放到视口的100%

  16. 16

    svg路径中的d3 js三角形

  17. 17

    d3.js v4 将视口移动到特定节点

  18. 18

    Flash AS3 | 创建摄影机/移动视口/缩放

  19. 19

    使用C ++在Qt3D中创建多个视口时出现问题

  20. 20

    为什么我仍然可以在iOS 7中缩放视口

  21. 21

    响应视口,在div#wrapper中按比例缩放四列(保持纵横比)

  22. 22

    如何在Webview中获取缩放的视口的宽度和高度?

  23. 23

    响应视口,在div#wrapper中按比例缩放四列(保持纵横比)

  24. 24

    如何缩放/移动相机以在Cesium.js中显示多边形(使视口适应多边形边界)

  25. 25

    d3 SVG中的Angular指令

  26. 26

    D3 SVG中的选择

  27. 27

    缩放图像以最适合视口

  28. 28

    基于设备的不同<meta>视口缩放?

  29. 29

    按比例缩放div以适合视口

热门标签

归档