【问题标题】:How do I change the colour of an SVG shape using jQuery?如何使用 jQuery 更改 SVG 形状的颜色?
【发布时间】:2014-09-02 08:25:07
【问题描述】:

大家好!新来的!希望以后能为社会做出应有的贡献。但首先,我需要一些我认为相当简单的东西!

我一直专注于网络的设计方面,所以主要关注 HTML 和 CSS。我最近才开始学习 JavaScript/jQuery,所以请耐心等待,哈哈!

我在使用 jQuery 更改 SVG 形状的颜色时遇到了一点麻烦。基本思想是当用户向下滚动页面时,某些元素会改变颜色。 HTML 元素按预期更改,但 SVG 属性没有。我读过一些关于 SVG DOM 与 HTML DOM 不同的内容,但真的不能理解它吗?一个小小的解释以及任何帮助都不会被忽视!

这是我的 HTML:

<header>
    <div id="headercontainer">
        <object id="logo" type="image/svg+xml" data="images/kennyheardlogo.svg"></object>
        <nav><a id="homelink" href="index.html">HOME</a> | <a id="aboutlink" href="index.html">ABOUT</a> | <a id="worklink" href="index.html">WORK</a> | <a id="sociallink" href="index.html">SOCIAL</a></nav>
    </div>
</header>

这是我的 CSS:

header {
    position: fixed;
    z-index: 1;
    width: 100%;
    height: 150px;
    background-color: #ffffff;
    -webkit-box-shadow: 0px 5px 10px 0px rgba(0,0,0,0.5);
    -moz-box-shadow: 0px 5px 10px 0px rgba(0,0,0,0.5);
    box-shadow: 0px 5px 10px 0px rgba(0,0,0,0.5);
    opacity: 0.8;
    -webkit-transition: background-color 0.5s ease;
    -moz-transition: background-color 0.5s ease;
    transition: background-color 0.5s ease;
}

.headerfade {
    background-color: #000000;
}

nav {
    position: absolute;
    top: 65px;  
    right: 40px;
    width: 480px;
    height: auto;
    color: #000000;
    text-align: center;
    letter-spacing: 10px;
    font-size: 10px;
}

nav, nav a {
    -webkit-transition: color 0.5s ease;
    -moz-transition: color 0.5s ease;
    transition: color 0.5s ease;
}

.navfade {
    color: #ffffff !important;
}

#icon {
    fill: #000000;
}

.iconfade {
    fill: #ffffff;
}

#letterk, #letterh {
    fill: #ffffff;
}

#text path {
    fill: #000000;
}

这是我的 jQuery:

$(window).scroll(function() {
    var scroll = $(window).scrollTop();

    if (scroll >= 350) {
        $("header").addClass("headerfade");
        $("nav, nav a").addClass("navfade");
        $("#icon").addClass("iconfade");
    } else {
        $("header").removeClass("headerfade");
        $("nav, nav a").removeClass("navfade");
        $("#icon").removeClass("iconfade");
    }
});

“#icon”的初始颜色是black,但是当用户从页面顶部滚动350px时,我希望颜色变成white。这就是我对“header”和“nav”元素所做的,效果很好。那么,有什么想法吗?

我希望我没有错过一些明显的令人尴尬的事情,哈哈!

感谢你们提供的任何帮助,伙计们!

【问题讨论】:

  • 所以当你向下滚动时 add / removeClass 适用于标题和导航但不适用于#icon?向下滚动时,您是否检查过该类已添加到#icon 中?
  • 没错,它不适用于#icon。我使用 Safari 的 JavaScript 分析器进行了检查,该类已添加到标题和导航中,但未添加到 SVG 文件中的#icon。
  • 我认为问题在于您使用的是object 元素而不是svg 元素。尝试获取所有 svg 代码并将其放入 DOM 中
  • 尝试 $("#icon").attr("class", "iconfade") 添加类和 $("#icon").attr("class", "")删除类
  • 很遗憾,这些解决方案似乎都不起作用?我很确定我也正确地实施了它们......

标签: javascript jquery html css svg


【解决方案1】:

这里有两个问题。

  1. 您不能像这样直接访问&lt;object&gt; 的内容。您需要获取contentDocument 并以这种方式访问​​它。

  2. CSS 不能跨文档边界工作。即使您将 iconfade 类添加到 #icon,它也无法看到它,因为 CSS 位于不同的文档中。

您可以做的是在 HTML 中内联 SVG 文件。那么它应该可以工作了。

【讨论】:

  • 嗯,好的。是否将 CSS 文档与 SVG 文档链接起来并不重要?此外,使用内联 SVG 似乎没有什么不同。
  • 玩了这个。关于 CSS 无法与 SVG 文档对话,您是绝对正确的。使用内联 SVG 最初不起作用,但我将 CSS 选择器“#icon”更改为“路径 #icon”,并且效果很好。颜色变化如预期!我唯一的问题是,SVG 代码很长。在 HTML 中,这是一个令人头疼的问题。无论如何可以使用外部 SVG 文档来执行此操作吗?
  • 你没有提供 SVG,所以我不知道里面有什么。
  • 您是否尝试过将样式放入 svg 中?即 ... link
猜你喜欢
  • 2021-12-31
  • 2018-08-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-08-12
相关资源
最近更新 更多