gpt4 book ai didi

用于访问 svg transform translate 的 x/y 值的 Javascript

转载 作者:行者123 更新时间:2023-12-05 04:29:41 26 4
gpt4 key购买 nike

有没有内置javascript目前存在可以直接访问的方法xysvg transform =translate(x,y)

例如下面的最小示例,我正在使用 svg元素

document.querySelectorAll('circle').forEach(
(a,i)=>{
const transformString= a.getAttribute('transform');
const valX = parseFloat(transformString.match(/(\d+\.\d+)(?=\,)|(\d+)(?=\,)/gm))+10;
a.setAttribute('transform',`${transformString.replace(/(\d+\.\d+)(?=\,)|(\d+)(?=\,)/gm,valX)}`)});
<!DOCTYPE html>
<html lang="en">

<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
</head>
<script type="text/javascript" src="https://d3js.org/d3.v7.min.js"></script>

<body>
<svg xmlns="http://www.w3.org/2000/svg" height="400" width="450">


<circle cx="0" cy="5" r="5" transform="translate(10,20)"></circle>
<circle cx="0" cy="5" r="5" transform="translate(25,30)"></circle>
<circle cx="0" cy="5" r="5" transform="translate(17.5,32.5)"></circle>
<circle cx="0" cy="5" r="5" transform="translate(10, 50)"></circle>

</svg>
</body>

</html>

并且此元素包含几个现有的圈子。 enter image description here

我要抓取每个圈子的transform=translate(x,y) x值并使用自定义函数更改它。

我目前正在按如下方式进行,我想避免写 regex如果存在直接访问 x 的内置(vanilla 和/d3)方法或 ytransform=translate

document.querySelectorAll('circle').forEach(
(a,i)=>{
const transformString= a.getAttribute('transform');
//grab the X value with regex and change as desired
const valX = parseFloat(transformString.match(/(\d+\.\d+)(?=\,)|(\d+)(?=\,)/gm))+10;
//replace existing X with new X
a.setAttribute('transform',`${transformString.replace(/(\d+\.\d+)(?=\,)|(\d+)(?=\,)/gm,valX)}`)});

d3等效

d3.selectAll('circle')
.attr('transform', function (d,i) {
const transformString= this.getAttribute('transform');
const valX = parseFloat(transformString.match(/(\d+\.\d+)(?=\,)|(\d+)(?=\,)/gm))+10;
return `${transformString.replace(/(\d+\.\d+)(?=\,)|(\d+)(?=\,)/gm,valX)}`
});

最佳答案

document.querySelectorAll('circle').forEach(
circle => {
const additionalTransform = circle.ownerSVGElement.createSVGTransform();
additionalTransform.setTranslate(10, 0);
circle.transform.baseVal.appendItem(additionalTransform);
// When doing this multiple times, `translate()`s might be piling up,
// like transform="translate(10, 0) translate(10, 0) translate(10, 0)".
// Consolidate them into a single matrix transformation.
circle.transform.baseVal.consolidate();
}
);

关于用于访问 svg transform translate 的 x/y 值的 Javascript,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/72253746/

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