D3为eventlistener添加了多个函数

时间:2015-10-13 15:30:53

标签: javascript d3.js javascript-events

我正在尝试向一个eventlistner添加多个函数。 但它不起作用。当我点击时,它不会触发停止功能。

所以我的问题是,是不是可以为一个事件提供多个功能?或者还有其他问题吗?

<svg>
<g id="graph">
    <circle cx="16.887" cy="333.923" r="6.268"/>
    <circle cx="33.574" cy="333.923" r="6.268"/>
    <circle cx="50.262" cy="333.923" r="6.268"/>
    <circle cx="66.949" cy="333.923" r="6.268"/>
    <circle cx="167.074" cy="333.923" r="6.268"/>
    <circle cx="183.762" cy="333.923" r="6.268"/>
    <circle cx="333.387" cy="333.923" r="6.268"/>
    <circle cx="316.699" cy="333.923" r="6.268"/>
    <circle cx="300.199" cy="334.101" r="6.268"/>
    <circle cx="266.637" cy="333.923" r="6.268"/>
    <circle class="grey" cx="250.137" cy="333.923" r="6.268"/>
    <circle class="grey" cx="216.762" cy="333.923" r="6.268"/>
</g>
</svg>

<script>
var svg = d3.select("svg");
var g = svg.select("#graph");

/*[--- Give every circle/event the function stop ---]*/
g.selectAll("circle").on('mouseover',stop);
g.selectAll("circle").on('mouseout',stop);

/* [---------- mouseover and mouseout hover effect ----------]*/
svg.selectAll("circle")
.on('mouseover', function(d){
   d3.select(this)
   .transition()
   .attr ({"r": "10"})
   .style("fill", "black")
})

 .on('mouseout', function(d){
    d3.select(this)
    .transition()
    .delay(100)
    .attr ({"r": "6.268"})
    .style("fill", "#7F4292")
 })

 svg.selectAll(".grey")
 .on('mouseout', function(d){
    d3.select(this)
    .transition()
    .delay(100)
    .attr ({"r": "6.268"})
    .style("fill", "#A9A9A9")
 })
 /* [----------------------------------------------]*/


 /* [--------------- stop loop Function ----------------]*/
 function stop() {
    if(run) {
      run = false;
    }
    else {
      run = true;
    }
 }

还有一个随机扩大圆圈的功能。但对于我的问题,这并不重要。此致

1 个答案:

答案 0 :(得分:0)

好的很酷。 当我添加 .foo 时,它可以工作。

如果事件侦听器已在所选元素上注册了相同类型,则在添加新侦听器之前将删除现有侦听器。 要为同一事件类型注册多个侦听器,该类型后面可以跟一个可选的命名空间,例如“click.foo”和“click.bar”。该类型的第一部分(“click” “例如”用于注册事件侦听器(使用element.addEventListener()),并在所选元素上添加方法__onclick.foo和__onclick.bar。

    /*[--- Give every circle/event the function stop ---]*/
    g.selectAll("circle").on('mouseover.foo',stop);
    g.selectAll("circle").on('mouseout.foo',stop);