Javascript 窗口大小更改时保持viewBox的比率

Javascript 窗口大小更改时保持viewBox的比率,javascript,svg,Javascript,Svg,我希望在浏览器窗口更改时保持该比率,以便viewBox始终具有屏幕大小,但当我尝试下面的代码时,它会缩小viewBox。有人能进一步帮助我吗 viewPort.setAttribute("width", screen.width); viewPort.setAttribute("height", screen.height); viewPort.setAttribute("viewBox","0 0 "+(screen.width-(screen.width+window.innerWidth)

我希望在浏览器窗口更改时保持该比率,以便viewBox始终具有屏幕大小,但当我尝试下面的代码时,它会缩小viewBox。有人能进一步帮助我吗

viewPort.setAttribute("width", screen.width);
viewPort.setAttribute("height", screen.height);
viewPort.setAttribute("viewBox","0 0 "+(screen.width-(screen.width+window.innerWidth))+" "+(screen.height-(screen.height+window.innerHeight)));

你的要求不清楚。我想您可能会对术语和viewBox的实际功能感到困惑

Viewport是指页面上元素的大小。有时被称为画布。其大小由“宽度”和“高度”属性设置

viewBox描述SVG内容的边界。它的目的是告诉渲染器所有内容的位置。渲染器使用这些尺寸确定如何缩放内容以适应视口

您是否只希望SVG与浏览器窗口的大小完全相同?如果是这样,那么您需要做的就是:

viewPort.setAttribute("width", window.innerWidth);
viewPort.setAttribute("height", window.innerHeight);
您根本不需要视图框。SVG不会缩放,但它将匹配浏览器窗口的大小

但是,如果您确实希望SVG能够缩放以适应窗口,那么您确实需要一个viewBox。但是viewBox必须设置为SVG内容的大小,而不是SVG画布/视口的大小

通常,viewBox将保持不变。当浏览器调整大小时,不会对其进行更改

在下面的示例中,我将viewBox设置为与椭圆元素的位置和大小相匹配。我添加了一个紫色矩形来表示实际的viewBox尺寸。请注意,视框区域会根据需要放大或缩小,以适合窗口和视口。默认情况下,它被缩放以完全适合视口内部。但您可以使用preserveSpectratio属性更改该行为

var viewPort=document.getElementByIdmysvg; 函数setViewportSize{ viewPort.setAttributewidth,window.innerWidth; viewPort.setAttributeheight,window.innerHeight; } //调整浏览器大小时更新SVG大小 window.addEventListenerresize,setViewportSize; //设置初始SVG大小 设置视口大小; html,正文{ 保证金:0; 溢出:隐藏; } svg{ 背景色:亚麻布; }
你的要求不清楚。我想您可能会对术语和viewBox的实际功能感到困惑

Viewport是指页面上元素的大小。有时被称为画布。其大小由“宽度”和“高度”属性设置

viewBox描述SVG内容的边界。它的目的是告诉渲染器所有内容的位置。渲染器使用这些尺寸确定如何缩放内容以适应视口

您是否只希望SVG与浏览器窗口的大小完全相同?如果是这样,那么您需要做的就是:

viewPort.setAttribute("width", window.innerWidth);
viewPort.setAttribute("height", window.innerHeight);
您根本不需要视图框。SVG不会缩放,但它将匹配浏览器窗口的大小

但是,如果您确实希望SVG能够缩放以适应窗口,那么您确实需要一个viewBox。但是viewBox必须设置为SVG内容的大小,而不是SVG画布/视口的大小

通常,viewBox将保持不变。当浏览器调整大小时,不会对其进行更改

在下面的示例中,我将viewBox设置为与椭圆元素的位置和大小相匹配。我添加了一个紫色矩形来表示实际的viewBox尺寸。请注意,视框区域会根据需要放大或缩小,以适合窗口和视口。默认情况下,它被缩放以完全适合视口内部。但您可以使用preserveSpectratio属性更改该行为

var viewPort=document.getElementByIdmysvg; 函数setViewportSize{ viewPort.setAttributewidth,window.innerWidth; viewPort.setAttributeheight,window.innerHeight; } //调整浏览器大小时更新SVG大小 window.addEventListenerresize,setViewportSize; //设置初始SVG大小 设置视口大小; html,正文{ 保证金:0; 溢出:隐藏; } svg{ 背景色:亚麻布; }
看起来您正在将viewbox设置为负大小。这会使viewbox无效。好的,我尝试使用Math.abs,但它也会缩小viewbox。如果我们调用screen.height sh和window.innerHeight wh,那么你的方程是sh sh+wh,它等于sh sh wh,它等于-wh。取它的绝对值和使用wh是一样的。那么正确的方法是什么呢请提供一份报告。我想我们都对您试图实现的目标感到困惑。看起来您正在将viewbox设置为负大小。这会使viewbox无效。好的,我尝试使用Math.abs,但它也会缩小viewbox。如果我们调用screen.height sh和window.innerHeight wh,那么你的方程是sh sh+wh,它等于sh sh wh,它等于-wh。取它的绝对值和使用wh是一样的。那么正确的方法是什么呢请提供一份报告。我想我们都对你想要达到的目标感到困惑。谢谢你,保罗。我想将视口和viewBox设置为屏幕大小,这样它就可以保持成本不变。所以当浏览器大小改变时,我不想
缩放视图框。我需要查看框,因为我使用滑块缩放内容。例如,我的屏幕大小是1600x900。视口和视口框设置为此大小。例如,现在当我将浏览器大小更改为一半时,viewBox将缩小,这是我不希望看到的。例如,viewBox应该缩放到1600x900,然后您可能只需要将viewBox的宽度和高度设置为与SVG的宽度和高度相同的值。A仍然是个好主意。谢谢你,保罗。它工作正常,我使用了其他一些影响缩放的代码。谢谢保罗。我想将视口和viewBox设置为屏幕大小,这样它就可以保持成本不变。因此,当浏览器大小更改时,我不想缩放视口。我需要查看框,因为我使用滑块缩放内容。例如,我的屏幕大小是1600x900。视口和视口框设置为此大小。例如,现在当我将浏览器大小更改为一半时,viewBox将缩小,这是我不希望看到的。例如,viewBox应该缩放到1600x900,然后您可能只需要将viewBox的宽度和高度设置为与SVG的宽度和高度相同的值。A仍然是个好主意。谢谢你,保罗。它工作正常,我使用了其他一些影响缩放的代码。