我在预加载器中使用SVG图标。我想使用脚本更改图标填充的颜色。我有一个小问题,在关闭预加载器之前,颜色只会短暂改变。
这是我的剧本:
jQuery(function($){
document.querySelector(".svgicon").getSVGDocument().getElementById("loadericon").setAttribute("fill", "#FFF");
});
还有我的HTML:
<object class="svgicon" type="image/svg+xml" data="'. get_template_directory_uri() . '/assets/images/preloaders/icon.svg'.'"
></object>
在icon.svg文件中,将ID“ loadericon”添加到HTML标记中。
有人可以帮我吗?
答案 0 :(得分:1)
一个选项将使用target属性,并且仅引用SVG的一部分,而其他所有内容均被隐藏svg > svg:not(:target) {display: none;}
请注意data属性的网址:cat.svg#redcat
object {
display: inline-block;
margin:.5em;
width: 100px;
height: auto;
border:1px solid #d9d9d9;
}
<object type="image/svg+xml"
data="https://s3-us-west-2.amazonaws.com/s.cdpn.io/222579/cat.svg#redcat">
</object>
<object type="image/svg+xml"
data="https://s3-us-west-2.amazonaws.com/s.cdpn.io/222579/cat.svg#blackcat">
</object>
我正在使用的SVG如下所示。请注意SVG内部的CSS。
<style type="text/css">
<![CDATA[
svg > svg:not(:target) {
display: none;
}
]]>
</style>
<desc>
<g id="cat">
<path id="cat_body" d="M121.506,108.953. . . z"/>
<path id="cat_head" d="M129.747,18.651. . . .z"/>
</g>
</desc>
<svg version="1.1" id="blackcat" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" viewBox="0 0 225 225">
<use xlink:href ="#cat" fill="black" />
</svg>
<svg version="1.1" id="redcat" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" viewBox="0 0 225 225">
<use xlink:href ="#cat" fill="red" />
</svg>
您可以在Using SVG with CSS3 and HTML5: Vector Graphics for Web Design第9章:新的观点中阅读有关此技术的更多信息
更新:在这种情况下,我使用按钮来更改SVG路径的颜色。您可以使用任何您喜欢的其他事件。
let data = "https://s3-us-west-2.amazonaws.com/s.cdpn.io/222579/cat.svg";
let object = document.querySelector("object");
black.addEventListener("click", function changeColor(e){
object.setAttribute('data', data +"#blackcat");
let clone = object.cloneNode(true);
let parent = object.parentNode;
parent.removeChild(object );
parent.appendChild(clone );
e.currentTarget.removeEventListener(e.type, changeColor);
})
object,button {
display: inline-block;
margin:.5em;
width: 100px;
height: auto;
border:1px solid #d9d9d9;
}
<div>
<object id="svgContent" type="image/svg+xml"
data="https://s3-us-west-2.amazonaws.com/s.cdpn.io/222579/cat.svg#redcat">
</object>
</div>
<p><button id="black">black cat</button></p>
答案 1 :(得分:1)
是的,您应该可以使用fill属性来做到这一点,就像这样:
<button id="btnColor">change color</button><br>
<object id="svgContent" type="image/svg+xml" data="cat.svg#redcat"></object>
<script>
var i = 0
var colors = ["lime", "cyan", "red", "pink", "blue"]
var object = document.querySelector("object");
btnColor.addEventListener("click", function (e) {
var svg = object.contentDocument.documentElement
svg.getElementById("redcat").children[0].setAttribute('fill', colors[i])
i = (i+1) % colors.length
})
</script>
只要您没有任何CORS问题,以下是一个有效示例:
https://raw.githack.com/heldersepu/hs-scripts/html/HTML/SVG/object.html
现在在该示例中,我正在使用@enxaneta提供的SVG图像,希望它与您的图像更接近,否则请提供您的图像。