【发布时间】:2017-12-19 17:09:46
【问题描述】:
我发现这个有用的 PHP 脚本可以使我的 SVG 路径相对于容器,因此在前端实现时可以响应。
$absolute_path = "M0,67.9586133 M0,67.9586133.....Z";
function regex_callback($matches) {
static $count = -1;
$count++;
$width = 1072.01;
$height = 399.23;
if($count % 2) {
return $matches[0] / $height;
} else {
return $matches[0] / $width;
}
}
$relative_path = preg_replace_callback('(\d+(\.\d+)?)', 'regex_callback', $absolute_path);
来源:Convert SVG path data to 0-1 range
由于目前我正在使用 JavaScript 和 Node,因此我正在尝试使用 JavaScript 重新创建此函数。到目前为止,这是我得到的,但我被卡住了,因为返回的数据与输入的数据完全相同。
function replacer(match, svgWidth, svgHeight) {
let count = -1;
count++;
if (count % 2) {
return match[0] / svgHeight;
} else {
return match[0] / svgWidth;
}
}
let svgPath = "M0,67.9586133 M0,67.9586133.....Z"
let nuPath = svgPath.replace('(\d+(\.\d+)?)', replacer);
console.log(nuPath);
任何帮助 - 方向和/或更正表示赞赏。
谢谢!
【问题讨论】:
-
为什么不直接使用
<g>元素来保持响应? -
我将我的 SVG 用作带有
clipPathUnits="objectBoundingBox"的剪辑路径,据我了解,为了使其成为响应单元,需要为 0 - 1。如果我不正确,请告诉我! -
什么样的 SVG 在坐标中需要这么多有效数字? XD 无论如何,在某些情况下你可以设置
viewBox属性,你试过吗? -
PHP 代码具有
$height和$width硬编码值,分别为1072.01和399.23。 JavaScript 代码尝试从字符串本身获取svgHeight和svgWidth值,因此它们的值将是(如果正确编写)"67.9586133"和"67.9586133"。您不能将不同的值放入一个函数并期望得到相同的结果。 -
感谢@JordanRunning——我实际上在我的 JS 函数中传递了与 svgHeight 和 svgWidth 相同的值——避免在问题中包含不必要的代码,但我意识到它并不清楚!跨度>
标签: javascript php regex replace preg-replace-callback