代码之家  ›  专栏  ›  技术社区  ›  Mladen Skrbic

如何在两个单独的SVG图像中填充多个类似路径?

  •  0
  • Mladen Skrbic  · 技术社区  · 6 年前

    我正在制作用户与SVG交互并在单击时用颜色填充的网站,我设法在单击时进行路径填充,但我目前遇到的问题是因为有2个SVG,当您单击以填充SVG1上的某些路径时,有时还需要填充SVG2路径。我想在SVG中添加一些类,然后检查SVG1路径是否与SVG2路径具有相同的类,然后根据该条件填充这两个路径。我想知道是否有更简单的方法。也不是所有的路径都应该填充相同的颜色只有一些,我看不到任何图案。我还考虑添加一些元数据,但这可能会使事情更加复杂。 here is what i have currently how i want it to work

      mounted() {
        let self = this;
        this.$nextTick(() => {
          Array(...document.getElementsByTagName('svg')).forEach((obj) => {
            console.log(obj)
            let children = obj.getElementsByTagName('*')
            console.dir(children)
            let arr = Array(...children);
            arr.forEach(function(item) {
              if (item.classList.contains("frontstich")) {
                item.style.fill = 'black'
              }
    
              //I WAS THINKING OF ADDING CONDITION MENTIONED ABOVE HERE
    
              else {
                item.addEventListener('click', function() {
                  item.style.fill = self.color;
                })
              }
            });
    
          })
        })
      }
    

    这是我在Vue组件中安装的部分

    1 回复  |  直到 6 年前
        1
  •  1
  •   rafaelcastrocouto    6 年前

    如果如您所说,没有其他模式来说明应该绘制什么,那么您需要自己指定它。

    您可以使用类或ID来完成这项工作,这真的不太容易,特别是如果您有一个大的SVG文件的话。

    很久以前我在这里做过类似的事 https://codepen.io/rafaelcastrocouto/pen/xnclb

    注意,对于一些元素,我改变了渐变停止颜色而不是填充属性,但基本上是相同的想法。我制作了一个对象来映射所有颜色,这允许我删除if语句。

     ch[i].attributes['stop-color'].value="#"+colors[names[ncolor]][j];
    

    也可以在外部CSS中列出所有颜色,只需更改svg根元素的类名,但仍需要指定要绘制的内容。