当前位置: 首页 > 面试题库 >

在d3.js中调整窗口大小时调整SVG大小

宣胜
2023-03-14
问题内容

我正在用d3.js绘制散点图。借助以下问题:
获取屏幕,当前网页和浏览器窗口的大小

我正在使用此答案:

var w = window,
    d = document,
    e = d.documentElement,
    g = d.getElementsByTagName('body')[0],
    x = w.innerWidth || e.clientWidth || g.clientWidth,
    y = w.innerHeight|| e.clientHeight|| g.clientHeight;

这样我就可以将图适合用户的窗口,如下所示:

var svg = d3.select("body").append("svg")
        .attr("width", x)
        .attr("height", y)
        .append("g");

现在,我希望在用户调整窗口大小时可以调整图的大小。

PS:我的代码中没有使用jQuery。


问题答案:

寻找“响应式SVG”,使SVG响应式非常简单,您不必再担心大小。

这是我的做法:

d3.select("div#chartId")

   .append("div")

   // Container class to make it responsive.

   .classed("svg-container", true)

   .append("svg")

   // Responsive SVG needs these 2 attributes and no width and height attr.

   .attr("preserveAspectRatio", "xMinYMin meet")

   .attr("viewBox", "0 0 600 400")

   // Class to make it responsive.

   .classed("svg-content-responsive", true)

   // Fill with a rectangle for visualization.

   .append("rect")

   .classed("rect", true)

   .attr("width", 600)

   .attr("height", 400);


.svg-container {

  display: inline-block;

  position: relative;

  width: 100%;

  padding-bottom: 100%; /* aspect ratio */

  vertical-align: top;

  overflow: hidden;

}

.svg-content-responsive {

  display: inline-block;

  position: absolute;

  top: 10px;

  left: 0;

}



svg .rect {

  fill: gold;

  stroke: steelblue;

  stroke-width: 5px;

}


<script src="https://cdnjs.cloudflare.com/ajax/libs/d3/5.7.0/d3.min.js"></script>



<div id="chartId"></div>

注意:
SVG图像中的所有内容都会随窗口宽度缩放。这包括笔划宽度和字体大小(甚至包括CSS设置的字体大小)。如果不希望这样做,则下面有更多涉及的替代解决方案。



 类似资料:
  • 我正在尝试构建一个包含6个窗格(作为父级添加到GridPane布局中)的简单Java项目。我必须在开始时设置窗口大小,并通过参考根布局的宽度和高度,设法将它们均匀地拆分。 但我想要他们调整大小,因为我改变了窗口的大小(使用鼠标,现在他们得到固定的大小)。 下面是我的代码:

  • 窗口大小,我们可以非常方便的使用width、height调整,但是如何知道 width和height是一个问题? 在 Window 操作系统中,假如我们想要缩放,我们通常会把鼠标移动到窗口的右边栏,和底部边栏,以及右下边栏。 而且在不同的边栏,鼠标呈现的样式也是不一样的。当我们在右边栏的时候我们可以通过cursor: e-resize;模拟鼠标样式。 在底部边栏我们可以通过cursor: s-re

  • #include <stdio.h> void fun1(void) { int i = 0; i++; i = i * 2; printf("%d\n", i); } void fun2(void) { int j = 0; fun1(); j++; j = j

  • 我有下面的代码,它设置了一个特定大小的窗口。它还从外部URL加载图像。

  • 问题内容: 我有以下JQuery代码: 唯一的问题是,这仅在首次加载浏览器时有效,我是否还希望在调整窗口大小时进行检查? 有任何想法吗? 问题答案: 这是一个使用jQuery,javascript和css处理调整大小事件的示例。 (如果您只是通过调整大小来设置样式(媒体查询),最好的方法是CSS) [ CSS javascript jQuery 如何停止调整大小的代码执行如此频繁! 这是绑定到调整

  • 问题内容: 我一直试图(徒劳地)建立一个页面,当我更改窗口大小时,其元素将重新调整大小。我可以在CSS中使用它来处理图像,但是没有问题,但是我似乎无法在文本上完成相同的操作,而且我不确定在CSS中是否有可能。而且我似乎找不到能完成此任务的jQuery脚本。 当用户调整窗口大小时,我实质上希望页面能够动态流畅地缩放,而无需用户调用页面缩放。通过css在我的img div上这可以正常工作,但对于文本则