gpt4 book ai didi

javascript - SVG 中形状的缩小和居中

转载 作者:行者123 更新时间:2023-12-01 03:57:34 25 4
gpt4 key购买 nike

我一直在努力形成在 SVG 中将 svg 形状居中的逻辑。 viewBox 缩放功能很好,但是,我很难使用 viewBox 使形状居中。​​

Jsbin

这是代码:

// SCALE & CENTRE THE TEMPLATE ON SCREEN
const svg = document.getElementsByTagName( "svg" )[ 0 ];
const t = document.getElementsByClassName( "templateParent" )[ 0 ];
const svgRect = svg.getBoundingClientRect(),
svgW = svgRect.width,
svgH = svgRect.height,
svgX = svgRect.x,
svgY = svgRect.y;
const aspectRatio = svgW / svgH;
const tRect = t.getBBox(),
tW = tRect.width,
tH = tRect.height,
tX = tRect.x,
tY = tRect.y;
const tmW = tW * 1.25,
tmH = tH * 1.25,
tmX = tX * 1.25,
tmY = tY * 1.25;
const vbH = tmH,
vbW = tmW * aspectRatio,
vbX = tmX * aspectRatio,
vbY = tmY;

最佳答案

如果您只想将路径移动/缩放到 svg 的中心,请尝试以下操作:(注意:浏览器不会以相同的方式处理 viewBox 和 svg 宽度/高度,因此我通常对元素使用转换)

<!DOCTYPE html>
<html>

<body onload=fit()>
<div style=background:lime;width:600px;height;400px;>
<svg width="600" height="400" >
<path id=myPath d="M329.66,99.99l22.1,4H238.43c-1.5-4.3,17.3-85.4,17.3-85.4c1.7-11-10.12-83.7-10.12-83.7l22.1-4 1.405 30.583 61.010 0 1.405 -30.583z" stroke="#bbb" stroke-width="1" vector-effect="non-scaling-stroke" fill="blue" />
</svg>
</div>

<script>
//---onload---
function fit()
{
var bb=myPath.getBBox()
var bbx=bb.x
var bby=bb.y
var bbw=bb.width
var bbh=bb.height
//---center of path---
var cx=bbx+.5*bbw
var cy=bby+.5*bbh

//---Use min of width/height create scale: ratio of desired width vs current width--
var height=400-20 ///--ie padding=20 px--
var scale=height/bbh
//---where to move it: center of svg---
var targetX=300
var targetY=200
//---move its center to target x,y ---
var transX=(-cx)*scale + targetX
var transY=(-cy)*scale + targetY
myPath.setAttribute("transform","translate("+transX+" "+transY+")scale("+scale+" "+scale+")")
}



</script>
</body>
</html>

关于javascript - SVG 中形状的缩小和居中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42515790/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com