Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/466.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何从外部触发d3事件_Javascript_D3.js - Fatal编程技术网

Javascript 如何从外部触发d3事件

Javascript 如何从外部触发d3事件,javascript,d3.js,Javascript,D3.js,我有一个d3选择,我已经定义了事件回调 var obj = d3.select("#kk").on("mouseleave",function(){ console.log("mouse leave"); }); 如何从外部触发事件?是否有类似于: obj.mouseleave(); // actuall mouse leave function calling 如果有,并且如果我选择了对象而没有参考obj,触发器还会工作吗 例如

我有一个d3选择,我已经定义了事件回调

var obj = d3.select("#kk").on("mouseleave",function(){
              console.log("mouse leave");       
          });
如何从外部触发事件?是否有类似于:

obj.mouseleave(); // actuall mouse leave function calling
如果有,并且如果我选择了对象而没有参考obj,触发器还会工作吗

例如:

var newObje=d3.select("#kk");
newObje.mouseleave(); //will this trigger the previously defined instructions

您可以为mouseleave创建一个常量函数,并在鼠标左键或外部调用它,如下所示:

function mouseleave(){            // Main mouse leave function.
     console.log('inside mouseleave function.');    
}



var obj = d3.select("#kk").on("mouseleave",function(){ // It will call on actual mouse leave event
                  console.log("mouseleave");
                  mouseleave();
              });

    mouseleave(); // call it externally when ever you want.

以下内容将通过dispatchEvent在元素上触发mouseleave事件


示例:我在底部添加了一个按钮来触发它。mouseleave事件附加到圆圈

是的,您不需要d3来触发该事件,香草javascript就足够了。您只需要使用该函数

下面是一个示例,举例来说,您将如何从按钮执行此操作

我添加了d3.select方式和普通JS方式,两者都可以正常工作

d3.选择kk.onmouseleave,函数{ console.logmouseleave; }; var button=document.getElementById'trigger-event'; button.onclick=函数{ var evt=新的MouseEventmouseleave; //使用d3调度事件的方法 d3.选择“kk”.node.dispatchEventevt; //使用普通JS发送它的方法 document.getElementById'kk'。dispatchEventevt; }; kk{ 宽度:100px; 高度:100px; 背景颜色:蓝色; } 触发器事件如果您已经在D3 v4上,您可以使用专门设计用于完成所需任务的:

selection.dispatchtype[,参数]

按顺序将指定类型的分派给每个选定元素

这是v4中包含的问题的结果

此外,该方法将使您能够向选择中包含的所有元素分派相同类型的事件。该方法的实现看起来与其他回答者使用event.dispatch的方法类似,但会使您的生活变得更轻松。下面的代码段为每个单独的圆圈都有一个侦听器,按钮可能会同时触发所有侦听器

var circles=d3.selectsvg.selectAllcircle .数据3.5 .enter.appendcircle .attrcx,函数d,i{return 60*i+20;} .自然减员,30 .attrr,20.attrfill,蓝色 .离开,离开{ d3.选择这个 .加油,红色 .transition.duration1000 .绿色,蓝色; }; d3.选择BTN .onclick,函数{ 圆圈。调度鼠标; };
Dispatch mouseleave to all circles我的应用程序有一个复杂的主干模型结构,回调函数实际上存储在一个嵌套集合中,触发器是由一个完全不同的集合生成的,我不希望生成一个全局函数。我想使用selection.Dispatch来触发拖动事件,但没有成功。也看到
  var event = document.createEvent('Event');
  event.initEvent('mouseleave', true, true);

  d3.selectAll("circle").node().dispatchEvent(event);