【发布时间】:2017-09-26 13:56:12
【问题描述】:
我需要在我的页面中显示 svg 图像。由于 svg 图像将使用 css 设置样式(填充、描边等属性),因此 svg 必须是内联的。现在我还需要动态设置这些svg文件的类属性(<svg class="someClass">...</svg>.)。
现在,我的问题是页面可以动态加载任意数量的 svg 图像。并且类名都将从数组中加载。由于 svg 是内联的,因此不可能使用循环来填充类名。
所以我想用json来处理这个。
{
"icon-name-1" : {
"viewbox" : "0 0 100 100",
"svgContent" : "..."
},
"icon-name-2" : {
"viewbox" : "0 0 100 100",
"svgContent" : "..."
},
...
}
然后在 PHP 中,我将文件加载到 json_object 并使用函数加载图标,最后循环数组,现在还带有图标名称,以回显 svg。
$iconObj = json_decode(file_get_contents("icons.json"));
function load_SVG ($iconObj, $iconName, $svgClassName) {
$viewbox = $iconObj->viewbox;
$svg = "<svg class='$svgClassName' viewBox='$viewbox'>";
$svg .= $iconObj->$iconName->svgContent;
$svg .= "</svg>";
return $svg;
}
// array is generated dynamically too
$arr = [
["class-name-1", "icon-name-1"],
["class-name-2", "icon-name-2"],
...
];
foreach ($arr as $item) {
load_SVG($iconObj, $item[0], $item[1]);
}
我觉得我在这里把事情复杂化了。所以我想知道是否有更好的方法或另一种方法来实现相同的目标?但我喜欢的一件事是我不必在代码中看到任何内联 svg,这肯定是一场噩梦 :)
【问题讨论】: