【问题标题】:Replace an SVG element with another on click单击时将 SVG 元素替换为另一个元素
【发布时间】:2014-01-04 00:22:16
【问题描述】:

您好,我正在尝试从 SVG 格式的 inkscape 图像创建一些交互式内容。 我正在通过 http://keith-wood.name/js/jquery.svg.js 的 svg.load 加载一个 SVG 文件

我想为加载的 svg 添加一个 onclick 侦听器,以便在单击它后加载不同的 SVG。我该怎么做呢?下面评论中的方法失败了。

<script type='text/javascript'>
//<![CDATA[
    function drawSwitch(svg) {
        var switchElement = svg.load('./3phase_switch.svg', {
        addTo: true,
        changeSize: true
    });
//switchElement.addEventListener("click", return function(){switchElement.setAttributeNS(null, "fill", "green");}, false);
}

$(window).load(function () {
    $(function () {
        $('#svgbasics').svg({
            onLoad: drawSwitch
        });
    });
}); //]]>
</script>           

【问题讨论】:

  • 源页面中的示例怎么样? keith-wood.name/svg.html#load
  • 我看不到元素 switchElement 是在哪里定义的,然后检查插件看看你在哪里找到那个元素 switchElemetn
  • 如果你想点击 svg 中的一个元素,你可以尝试类似http://jsfiddle.net/wRFYn/

标签: javascript jquery html svg jquery-svg


【解决方案1】:

由于元素是在页面加载时呈现的,您应该监听对已经存在的父元素的点击;例如document:

// Use this same as $(document).ready()
jQuery(function( $ ){

  // Listen for a click on the document but get only clicks coming from #svgbasics
  $(document).on('click', '#svgbasics', function(){

    // this === #svgbasics element
    drawSwitch( this );

  });

});

【讨论】:

    【解决方案2】:

    这就是我最终做到的方式,我通过 Chrome 开发人员检查了元素。工具并在 SVG 中找到用作目标侦听器的元素名称 (#layer1)。使用下面的代码,我可以在两个不同的 SVG 之间来回切换

                function drawOpenSwitch(svg){
                var closed=false;
                var changeSwitch = function (){
    
                    $('#layer1').click(function() {
    
                    if(!closed){
                        svg.clear();
                        switchElement=svg.load('./3phase_switch_closed.svg', {onLoad: changeSwitch, addTo: true, changeSize: true});
                    }else{
                        svg.clear();
                        switchElement=svg.load('./3phase_switch.svg', {onLoad: changeSwitch, addTo: true, changeSize: true});
    
                    }
                    closed=!closed;
                    })};
    
    
                var switchElement=svg.load('./3phase_switch.svg', {onLoad: changeSwitch, addTo: true, changeSize: true});
    
                }
    
    
    
                $(window).load(function(){
                $(function() {
                    $('#svgbasics').svg({onLoad: drawOpenSwitch});
                });
    

    【讨论】:

    • 您正在展示如何修改现有 svg 元素的属性(或者这就是我的理解)。但是如果我想用另一个替换现有元素怎么办?有什么想法吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多