gpt4 book ai didi

javascript - 了解 SVG 查询字符串参数

转载 作者:数据小太阳 更新时间:2023-10-29 05:19:25 25 4
gpt4 key购买 nike

我创建了一个 SVG 文件,打算用作 CSS 中的背景图片。我希望能够使用查询字符串参数更改 SVG 中的填充颜色,如下所示:

#rect     { background-image: url( 'rect.svg' ); }
#rect.red { background-image: url( 'rect.svg?color=red' ); }

据我所知,使用 SVG 中的脚本标记,我能够获取 color 参数并更新填充颜色。这是一个 SVG 示例:

<!DOCTYPE svg PUBLIC "-//W3C//DDTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<svg version="1.1" xmlns="http://www.w3.org/2000/svg">
<rect width="100%" height="100%" />

<script>
<![CDATA[
var params = { };
location.href.split( '?' )[1].split( '&' ).forEach(
function( i )
{
params[ i.split( '=' )[0] ] = i.split( '=' )[1];
}
);

if( params.color )
{
var rect = document.getElementsByTagName( "rect" )[0];
rect.setAttribute( "fill", params.color );
}
]]>
</script>
</svg>

直接转到文件,或使用对象标签似乎可行,但对于 CSS 背景图像或 img 标签,颜色参数将被忽略。

我不确定这里发生了什么,我希望对我试图完成的事情有一个解释或替代解决方案(最好不求助于服务器端处理)。

这是一个显示不同渲染方法的 jsFiddle:http://jsfiddle.net/ehb7S/

最佳答案

您可以使用隐藏的内联 SVG,更改它并将其动态编码为您放入 background-image 属性中的数据 URL。您的 HTML 可能如下所示:

<div id="backgroundContainer" style="display:none">
<svg width="100px" height="100px" id="backgroundSvg" xmlns="http://www.w3.org/2000/svg">
<circle cx="50" cy="50" r="50" fill="green"/>
</svg>
</div>

<div id="divWithBackground" onclick="changeBackground(event)">
Click to change background SVG to random color
</div>

和你的 JavaScript 一样

changeBackground = function(event) {
var backgroundSvg = document.getElementById("backgroundSvg");
var backgroundContainer = document.getElementById("backgroundContainer");
backgroundSvg.getElementsByTagName("circle")[0].setAttribute(
"fill",
["red","green","blue","black"][Math.floor(4*Math.random())]
);
event.target.setAttribute(
"style",
"background-image:url(data:image/svg+xml,"
+ encodeURI(backgroundContainer.innerHTML)
+ ")"
);
}

参见 proof of concept on jsFiddle .

关于javascript - 了解 SVG 查询字符串参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15977018/

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