【问题标题】:how to change color on SVG with skrollr jQuery plugin如何使用 skrollr jQuery 插件更改 SVG 的颜色
【发布时间】:2013-09-09 01:17:27
【问题描述】:

我网站上的徽标是 SVG。

我找到了一些 javascript,可以让我的内联 SVG 徽标可编辑:

/*
     * Replace all SVG images with inline SVG
     */
        jQuery('img.svg').each(function(){
            var $img = jQuery(this);
            var imgID = $img.attr('id');
            var imgClass = $img.attr('class');
            var imgURL = $img.attr('src');

            jQuery.get(imgURL, function(data) {
                // Get the SVG tag, ignore the rest
                var $svg = jQuery(data).find('svg');

                // Add replaced image's ID to the new SVG
                if(typeof imgID !== 'undefined') {
                    $svg = $svg.attr('id', imgID);
                }
                // Add replaced image's classes to the new SVG
                if(typeof imgClass !== 'undefined') {
                    $svg = $svg.attr('class', imgClass+' replaced-svg');
                }

                // Remove any invalid XML tags as per http://validator.w3.org
                $svg = $svg.removeAttr('xmlns:a');

                // Replace image with new SVG
                $img.replaceWith($svg);

            }, 'xml');

        });

既然我可以用 css 改变颜色,那么是否可以将它与 jQuery 插件 skrollr 一起使用:https://github.com/Prinzhorn/skrollr/tree/master/examples,这样我可以在向下滚动时改变标志的颜色?

我试图将其添加到 SVG,但没有成功:data-0="fill:rgb(255,0,0);" data-500="fill:rgb(0,0,255);"

下面是它的小提琴。

http://jsfiddle.net/NEhmK/1/

【问题讨论】:

    标签: jquery css svg


    【解决方案1】:

    你在哪里添加data-0="fill:rgb(255,0,0);" data-100="fill:rgb(0,0,255);" 属性?如果我将它们添加到所有 <path> 元素中,这似乎对我有用,即

    <path data-0="fill:rgb(255,0,0);" data-100="fill:rgb(0,0,255);" fill="#6EC5CB"...
    

    如果您将它们添加到其他地方,例如CSS 或 &lt;g&gt; 我认为库不会覆盖路径上已经存在的填充。

    如果您想将属性添加到路径标记中,请调​​用document.rootElement.getElementsByTagName("path") 并遍历结果。例如

    var paths = document.documentElement.getElementsByTagName("path"); 
    for (var i = 0; i < paths.length; i++) { 
        paths[i].setAttribute("data-0", "fill:rgb(255,0,0);"); 
        paths[i].setAttribute("data-100", "fill:rgb(0,0,255);"); 
    }
    

    或者从路径中删除所有现有的填充属性。

    【讨论】:

    • 我将“数据”代码放在 svg-tag 中,并尝试创建一个类来放置它,但效果不大。我现在试图放置在一条路径内,你是对的,它可以工作。一个小问题,正如你所看到的,我有很多路径,所以我需要将“数据”代码放在所有 -tags 中?有没有更容易解决的方法?
    • 你会把代码放在哪里:var paths = document.rootElement.getElementsByTagName("path"); for (var i = 0; i &lt; paths.length; i++) { paths[i].setAttribute("data-0", "fill:rgb(255,0,0);"); paths[i].setAttribute("data-100", "fill:rgb(0,0,255);"); }
    • 嗯,似乎无法正常工作。看到这个小提琴:jsfiddle.net/NEhmK/3
    • 我不知道你做了什么,但这是你原来的小提琴修改:jsfiddle.net/longsonr/Yj5Wh
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-08-29
    • 1970-01-01
    • 2012-08-12
    相关资源
    最近更新 更多