我在 svg 元素上使用 d3 的拖动行为,该元素可能需要放在可见区域之外。我将它设置在两个 div 中,溢出设置为自动以启用滚动。我只使用某些浏览器,但不是全部。
问题是在某些浏览器中,您可以在拖动时滚动,但在其他浏览器中,窗口在拖动时不会滚动。到目前为止,我还没有找到一种方法来使这项工作始终如一。
有关工作示例,请参见小提琴:http: //jsfiddle.net/glanotte/qd5Td/1/
这按预期工作:
chrome - mac/windows safari - mac
但不工作
火狐 - mac/windows IE - windows
html:
<div id="outerFrame">
<div id="innerFrame">
<svg width="600" height="600">
</svg>
</div>
</div>
CSS:
#outerFrame{
width: 300px;
height: 300px;
border: 1px solid red;
overflow: auto;
}
#innerFrame{
width: 600px;
height: 600px;
background-color: lightgrey;
}
javascript:
var drag = d3.behavior.drag()
.on("dragstart", dragstart)
.on("drag", dragmove)
.on("dragend", dragend);
function dragstart() {
d3.select(this).style("border", "1px solid red");
}
function dragmove(d) {
var coordinates = d3.mouse(d3.select("svg").node());
d3.select(this).attr({
x: coordinates[0] - 50,
y: coordinates[1] - 25
})
}
function dragend() {
d3.select(this).style("border", null);
}
d3.select("svg")
.append("rect")
.attr({x: 100, y: 100, width: 100, height: 50})
.call(drag);