jquery – 单击更改图像(svg)

我正在尝试Raphael vectron,而我正试图通过点击按钮来更改svg图像.

这当然是不可能的,因为当svg被渲染时它被渲染为路径:

<path cx="100" d="M35.269,257.154C34.393,245.68099999999998,45.438,234.091,48.492,223.00799999999998C53.634,204.34099999999998,54.985,185.004,60.041 and so on...... " stroke="none" fill="#9d49ce" style=""></path>

下面是代码,如果我正在使用普通图像(如.png),它将起作用,但问题是如何用Raphael(和vectron)更改svg图像.

HTML:

<div id="container">
 <div id="avatarBox" class="bgBox_blue">
  <div id="charBody" class="svg-file" data-svg="img/body1.svg"></div>
 </div>
 <div id="toolBox">
  <div class="toolboxArea">
    Byt kropp<br/>
    <button id="moveLeftBtn"><</button>
    <button id="moveRightBtn">></button>
    <div class="clear"></div>
  </div>

JS:

$('.svg-file').vectron({
    scale: 1
  }).ajaxSuccess(function(){
    $('svg').attr({
      'height': ($('svg').attr('height')*120)/100,
      'width': ($('svg').attr('width')*110)/100,
    });

    var paper = $('.svg-file').data('vectron').paper;
    var unicorn = paper.top;

    $('.bodyBg').live('click', function(){
      unicorn.attr({
        fill: $(this).val(),
        cx: 100
      });
    });
  });


var moveRightBtn = $('#moveRightBtn');
    moveRightBtn.on('click', function(){
        var newImage = 'body' + (AvatarGenerator.eyes + 1) + '.svg';
        $('#charBody').attr('data-svg','img/' + newImage);
    });
});

最佳答案 您可以将路径包装在svg标记内.

<svg xmlns="http://www.w3.org/2000/svg" version="1.1">
<path cx="100" d="M35.269,257.154C34.393,245.68099999999998,45.438,234.091,48.492,223.00799999999998C53.634,204.34099999999998,54.985,185.004,60.041 and so on...... " stroke="none" fill="#9d49ce" style=""></path>
</svg>

它将表现为svg元素.我在Chrome和IE上测试过它.

因此,在您的情况下,给定一个包含此行的HTML文件:

<div id="charBody" class="svg-file" data-svg="img/body1.svg"></div>

调用$(‘.svg-file’).vectron();为charBody创建一个子svg元素,其中包含从文件加载的内容,该内容显示在页面中.

我想说的是,您可以直接将svg元素字符串中的内容添加到您希望添加SVG的div的innerHTML中,而不是调用vectron.

vectron最近一年前更新过,所以我对它没有寄予厚望.此外,你只需要在buttonclick上更改一个svg,这可以在没有vectron的情况下轻松完成.

点赞