Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/html/79.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/svg/2.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
d3,svg中的html,动画不透明度使div失去位置,为什么?_Html_Svg_D3.js_Position - Fatal编程技术网

d3,svg中的html,动画不透明度使div失去位置,为什么?

d3,svg中的html,动画不透明度使div失去位置,为什么?,html,svg,d3.js,position,Html,Svg,D3.js,Position,某些上下文: 我制作了一个force布局,并将div附加到svg g节点上,以便显示漂亮的文本段落。 我正在尝试创建淡出插入的div的过渡 问题: 每当我在div的不透明样式属性上启动转换时,它就会从定位流中弹出。我已经把这个问题隔离在链接中了。它与force布局无关,但我使用了外来元素,以便将html放置在基于svg的force布局中 下面是一个示例,并且: 和一个屏幕截图,从小提琴(注意它似乎复制了div) 过渡前的国家权利: 过渡期间的状态: 我正在使用OS X 10.6.8上的Chr

某些上下文:

我制作了一个force布局,并将div附加到svg g节点上,以便显示漂亮的文本段落。 我正在尝试创建淡出插入的div的过渡

问题:


每当我在div的不透明样式属性上启动转换时,它就会从定位流中弹出。我已经把这个问题隔离在链接中了。它与force布局无关,但我使用了外来元素,以便将html放置在基于svg的force布局中

下面是一个示例,并且:

和一个屏幕截图,从小提琴(注意它似乎复制了div)

过渡前的国家权利:

过渡期间的状态:


我正在使用OS X 10.6.8上的Chrome 28来查看它。在Safari上,它变得更加有趣,元素在可见性中来回闪烁。

我似乎无法理解为什么不透明度转换会将div移出位置。也许这是一个已经解决的错误,因为拉尔斯认为铬没有问题

但是,我确实找到了在svg中设置div动画的解决方案:将foreignObject包装在它自己的svg:g元素中,并设置g元素的动画,而不是在foreignObject中设置div的动画

这是我在OS X 10.6.8上可以在Chrome 28和Safari 5.1.9上使用的

代码的区别是:

var gWrapOnForeign = d3.select("body")
    .append("svg")
    .attr("height", 200)
    .attr("width", 300)
    .append("svg:g")
    .attr("transform", 
          "translate(40, 20)")
    .append("svg:g");

var foreign = gWrapOnForeign.append("svg:foreignObject")
    .attr("width", "100px")
    .attr("height", "50px");

var outer = foreign.append("xhtml:div")
    .attr("class", "outer")
    .style("opacity", 1.0);

var inner = outer.append("xhtml:div")
    .attr("class", "inner")
    .text("inner div");

gWrapOnForeign.transition()
    .duration(3000)
    .style("opacity", 0.0);

谷歌Chrome(v49.0.2623.110)似乎仍然没有解决这个问题。 这是一个仍然向我展示这个问题的例子

<svg width="500">
  <g transform="translate(0,50)">
    <foreignObject width="500" height="200">
      <fieldset>
        <input type="text" value="A" style="opacity: 0.9;">
        <input type="text" value="B" style="opacity: 1;">
      </fieldset>
    </foreignObject>
  </g>
</svg>

似乎“g:translate”和“foreignObject”的组合在webkit浏览器中处理得不好。显然,将垂直/水平移动从“g:translate”转移到异物的“x”或“y”标记可以解决问题。证明



请您发布一个显示问题的force布局示例好吗?我已经在小提琴中隔离了这个问题,它似乎与force布局无关(我只是用它来调整我的g元素的translate属性),我只是想给出一些我为什么使用foreignObjects的上下文。但是,是的,我会把它拔出来。嗯,你的小提琴对我来说很好。在Linux.darn上安装Chromium,这使得它更难理解和修复。对我来说,它一直像截图。谢谢
<svg width="500">
  <g transform="translate(0,50)">
    <foreignObject width="500" height="200">
      <fieldset>
        <input type="text" value="A" style="opacity: 0.9;">
        <input type="text" value="B" style="opacity: 1;">
      </fieldset>
    </foreignObject>
  </g>
</svg>
<svg width="500">
  <g>
    <foreignObject width="500" height="200" y="50">
      <fieldset>
        <input type="text" value="A" style="opacity: 0.9;">
        <input type="text" value="B" style="opacity: 1;">
      </fieldset>
    </foreignObject>
  </g>
</svg>