如何防止剪裁使用 D3 库(在 Javascript 中)绘制的 SVG?

How do I prevent clipping of an SVG drawn with the D3 library (in Javascript)?

我正在尝试创建一个大的 SVG 矩形来侦听鼠标点击,但无论设置的值如何,SVG 的宽度似乎都在 300 像素左右上限。我在网上阅读了很多示例,并认为这可能是由视框和视口设置 (http://jonibologna.com/svg-viewbox-and-viewport/) 引起的,但没有成功。下面是我的程序的简化版本,它演示了这个问题。

(这里还有一个 jsfiddle:http://jsfiddle.net/bologna/pyLLu6rh/

HTML:

<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
<script src="https://code.jquery.com/ui/1.8.21/jquery-ui.min.js"></script>
<script src="http://d3js.org/d3.v3.min.js" charset="utf-8"></script>
<body>
    <div class="container">
        <div class="page-header">
                <h1>Title</h1>

            <p>Blah blah blah...</p>
        </div>
        <div id="results"></div>
        <div id="legend">
            <p style="font-size:80%">The orange dots represent buses as they arrive to pick up passengers, and the green dots represent people when they get to the bus stop.</p>
        </div>
        <div id="touch-area"></div>
    </div>
    <!-- /class="container">-->
</body>

这是脚本:

initGraphs();

function initGraphs() {

    var svg = d3.select("#touch-area").append("svg")
        .append("g");
    // move range above overlay and call the overlay event handlers from there
    svg.append("rect")
        .attr("id", "touch-area1")
        .attr("class", "touch-area1")
        .attr("x", 0)
        .attr("y", 0)
        .attr("width", "400px")
        .attr("height", "60px")
        .attr("viewbox", "0 0 500 500")
        .attr("fill", "blue")
        .on("click", mouseclick);
};

function mouseclick() {
    console.trace('mouse click!!!');
    var pos = d3.mouse(this);
    console.trace('mouse ' + pos[0] + '  ' + pos[1]);
};

我是 HTML5、javascript、jQuery 和 D3 的新手,所以它很可能很简单??如果你能在我开始诉诸咒语之前解决这个问题,非常感谢。

SVG 本身会剪辑任何位于 SVG 边界之外的内容。您的代码没有显示您是否正在做任何事情来确保 SVG 对矩形来说足够大。您需要:

var svg = d3.select("#touch-area").append("svg")
    .attr("width", 400)
    .attr("height", 60)
    .append("g");

或者您可以通过从 css 文件设置宽度和高度来实现相同的目的(但是您必须使用 400px)。

最后,当通过 CSS 设置大小时,我遇到了至少一种浏览器(我认为是 Firefox),您还必须在其中制作 SVG display:blockdisplay:inline-block适用尺寸。