当前位置: 首页 > 知识库问答 >
问题:

在浏览器中使用ViewBox调整SVG对象大小的问题

上官锦
2023-03-14

我有两个div容器。第一个包含许多小的SVG图像,第二个应该包含一个您单击的SVG图像。

单击第一个div中的任何SVG图像时,我想:

  1. 克隆SVG映像。
  2. 将它(克隆)重新缩放到原来大小的5倍。
  3. 在第二个div容器中查看。

我做了一些研究,发现我可以使用ViewBox控制SVG图像的缩放和大小。所以我设置了viewBox属性。一个小型svg如下所示:

            var small svg = div.append("svg:svg")               
                .attr("class", "thumbnail")
                .attr("width", w)
                .attr("height", h)  
                .attr("viewBox", "0 0 " + w + " " + h)
                .attr("preserveAspectRatio", "none")

                .on("click", function(){
                            var projectedGraph = this.cloneNode(true);


            IncreaseSize(projectedGraph);

            });

现在,在“IncreaseSize”方法中,我执行了以下操作:

            projectedGraph.setAttribute("class", "main")
            projectedGraph.setAttribute("width", w*5)
            projectedGraph.setAttribute("height", h*5)
            projectedGraph.setAttribute("viewBox", "0 0 " + (w*5) + " " + (h*5))


            $mainContent.append(projectedGraph); // append to second Div

但尺寸保持不变(视觉上)。当我在chrome中检查元素时。参数已设置。我花了很多时间调整这些值,试图理解这个问题,每次我增加投影图形的viewBox宽度和高度,而不重置SVG的宽度和高度,图像就会变小

我看到了很多相关的问题如:

>

  • 使用ViewBox根据窗口大小调整svg的大小

    如何缩放SVG图像以填充浏览器窗口?

    但我还是无法解决这个问题。请问我做错了什么?

  • 共有1个答案

    孙泳
    2023-03-14

    width和height属性控制SVG绘图占用的面积。viewBox控制您看到的内容。如果您增加了它们,那么您将看到更多的东西,否则是不可见的(在绘图区域之外),但每个形状将是相同的大小。

    如果你想让形状变大,比如变焦一样的效果,那么就不要改变ViewBox。

     类似资料:
    • 我无法将svg的大小调整为20px到20px。下面是svg的原始代码大小,它是巨大的0 0 35.41 35.61: 但是,然后我将viewbox值更改为“0 0 20 20”,而不指定svg本身的宽度和高度,并且大小仍然非常大: 然后我在主svg文件中添加了一个宽度20和高度20,结果的大小变小了,但是它现在被裁剪了。 我阅读了SVG文档,并且理解了如果您不指定宽度/高度,它将使用ViewBox

    • 问题内容: 调整浏览器窗口大小时,有什么方法可以调整jqGrid的大小?我已经尝试过这里描述的方法,但是该技术在IE7中不起作用。 问题答案: 作为后续措施: 由于不可靠,本文中显示的先前代码最终被放弃了。我现在按照jqGrid文档的建议使用以下API函数调整网格大小: 为了进行实际的大小调整,将实现以下逻辑的函数绑定到窗口的resize事件: 使用其父级的clientWidth和(如果不可用)o

    • 问题内容: 我希望在调整浏览器窗口大小时自动调整所有(或部分)图像的大小。我发现了以下代码-尽管它什么也没做。 HTML CSS 在调整浏览器窗口的大小时,如何基本设置全屏设计(带有),并使元素处于完全相同的位置(明智的选择),同时它们的大小也进行调整(就像对背景一样)? 要使图像灵活,只需添加和。图像并在IE7中有效,但在IE8中无效(是的,另一个怪异的IE错误)。要解决此问题,您需要添加IE8

    • (对象SVG和img SVG不能为我的目的工作。它必须是内联的。解决方案不必是CSS...JavaScript绝对是一个可以接受的解决方案。)

    • 我使用数组/循环从一个名为gallery(Wordpress)的自定义字段获取图像。检索到的图像未调整大小,这意味着它们的最大宽度为150px,最大高度为150px。现在我想知道如何自动让这些图像适应浏览器的大小。Chrome做得很好,但IE和FF做不到。当我设置img{width:100%;}调整大小是可行的,但是图像本身的大小是错误的,你可以想象得到。 是否有其他可能让图像自动调整到浏览器大小

    • 问题内容: 我正在用d3.js绘制散点图。借助以下问题: 获取屏幕,当前网页和浏览器窗口的大小 我正在使用此答案: 这样我就可以将图适合用户的窗口,如下所示: 现在,我希望在用户调整窗口大小时可以调整图的大小。 PS:我的代码中没有使用jQuery。 问题答案: 寻找“响应式SVG”,使SVG响应式非常简单,您不必再担心大小。 这是我的做法: 注意: SVG图像中的所有内容都会随窗口宽度缩放。这包