【问题标题】:Javascript events on elements at same level同一级别元素上的 Javascript 事件
【发布时间】:2014-09-24 13:12:39
【问题描述】:

我在一个组中有两个 SVG 元素。两者都属于对象模型中的单独范围。 现在,我想同时捕获两个元素上的鼠标事件。

问题是我只在最上面的元素而不是下面的元素中获取事件。 由于两个元素处于同一级别,我无法使用捕获和气泡。

下面是我的代码更简单的方式:

http://jsfiddle.net/zLx15u8c/10/

var parent = document.getElementById( 'myGrp' );
var telement = document.getElementById( 'telement' );

  var polyConfig = {
      'points': '0,0 500,500',
      'id': 'pLine',
      'fill': 'red',
      'stroke': 'black',
      'stroke-width': 2,
      'appendTo': parent
  };

  var pLine = CreateSvgElement( 'polyline', polyConfig );
  var prect = CreateSvgElement( 'rect',
                                    {
                                        'x': 0,
                                        'y': 0,
                                        'width': 200,
                                        'height': 200,
                                        'stroke': 'black',
                                        'fill-opacity': 0,
                                        'appendTo': parent
                                    } );
prect.addEventListener( 'mousemove', OnRectMouseMove,false );
prect.addEventListener( 'mousedown', OnRectMouseDown, false );

pLine.addEventListener( 'mousemove', OnMouseMove );
pLine.addEventListener( 'mousedown', OnMouseDown );

在示例中,我想在矩形内在线捕获事件。

【问题讨论】:

    标签: javascript svg event-handling dom-events


    【解决方案1】:

    通过先创建多边形,然后创建折线,我得到了预期的输出:

    http://jsfiddle.net/Lrs6ngm5/

    var prect = CreateSvgElement('rect', {
        'x': 0,
            'y': 0,
            'width': 200,
            'height': 200,
            'stroke': 'black',
            'fill-opacity': 0,
            'appendTo': parent
    });
    var polyConfig = {
        'points': '0,0 500,500',
            'id': 'pLine',
            'fill': 'red',
            'stroke': 'red',
            'stroke-width': 2,
            'appendTo': parent
    };
    
    var pLine = CreateSvgElement('polyline', polyConfig);
    

    【讨论】:

    • 好的,这里还有更多复杂情况。当鼠标右键单击时,我想在线捕获,如果鼠标左键单击,我需要在矩形上捕获:(
    • 我很确定 svg 不支持这种交互。
    • 是的,我也猜到了。但我没有选择,需要找到解决方法。
    • 只是根据功能需求改变层来管理。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-03-04
    • 2019-06-11
    • 1970-01-01
    • 1970-01-01
    • 2015-03-08
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多