Javascript 与d3中的其他元素执行双鼠标事件
我试图在节点上为mousedown上显示的周围弧触发mouseup事件 我想要的功能是按住一个节点并将其拖动到一个弧中,触发弧和节点的鼠标点击事件。我在下面的JSFIDLE中引用的当前代码中遇到了问题,非常感谢您的帮助 对于我的弧,我有以下代码,我希望在鼠标悬停在特定弧上方时执行这些代码:Javascript 与d3中的其他元素执行双鼠标事件,javascript,d3.js,data-visualization,pie-chart,Javascript,D3.js,Data Visualization,Pie Chart,我试图在节点上为mousedown上显示的周围弧触发mouseup事件 我想要的功能是按住一个节点并将其拖动到一个弧中,触发弧和节点的鼠标点击事件。我在下面的JSFIDLE中引用的当前代码中遇到了问题,非常感谢您的帮助 对于我的弧,我有以下代码,我希望在鼠标悬停在特定弧上方时执行这些代码: slices.append('path') ... .on('mouseup', function(arc) { console.log(arc.data.title)
slices.append('path')
...
.on('mouseup', function(arc) {
console.log(arc.data.title)
}
);
我还希望在将节点拖动到特定圆弧上并释放鼠标按钮后运行节点的鼠标:
svg.append("g")
.attr("class", "node")
.selectAll(".bubble")
.data(data, function(d){ return d.id; })
.enter().append("circle")
...
.on('mousedown', nodeClickedArcs)
.on('mouseup', removeArcs)
谢谢大家!
这里的关键挑战是鼠标事件基本上被圆圈吸收。您也许可以对元素进行排序,使弧的父
g
将子g
与圆一起保存,以允许事件向上传播到相关的父元素,但此时圆位于弧的下方
我将在下面演示的一个选项是在拖动过程中从节点剥离指针交互。这不会中断拖动(在Chrome、Firefox、IE上测试),但允许鼠标与其他元素进行交互,例如鼠标悬停/鼠标退出事件。然后我们可以监听鼠标进入(和退出)目标形状,如果拖动结束(鼠标向上)在目标形状上,我们可以触发特定动作
这需要鼠标向上的所有事件逻辑都位于“拖动结束”函数中,但需要目标形状的鼠标进入/退出侦听器
基于上述内容,在下面的代码片段I中:
var svg=d3.选择(“主体”)
.append(“svg”)
.attr(“宽度”,500)
.attr(“高度”,300);
var drag=d3.drag()
.打开(“拖动”,拖动)
.在(“结束”,德拉根德);
var squares=svg.selectAll(“rect”)
.data([{x:30},{x:130},{x:230},{x:330},{x:430}])
.输入()
.append(“rect”)
.attr(“x”,函数(d){return d.x;})
.attr(“y”,120)
.attr(“宽度”,40)
.attr(“高度”,40)
.attr(“填充”、“白色”)
.on(“mouseenter”,函数(d){d.active=true;})
.on(“mouseout”,函数(d){d.active=false;});
var circles=svg.selectAll(“圆”)
.数据(d3.范围(20))
.输入()
.附加(“圆圈”)
.attr(“cx”,函数(d){返回d/21*500+25;})
.attr(“cy”,函数(d){返回d%2*40+50;})
.attr(“r”,10)
.attr(“fill”,函数(d){return d3.schemeCategory20[d];})
.呼叫(拖动);
函数(d){
var x=d3.鼠标(this)[0];
var y=d3.鼠标(this)[1];
d3.选择(本)
.attr(“cx”,x)
.attr(“cy”,y)
.style(“指针事件”、“无”);
}
函数dragEnd(d){
var rect=平方。过滤器(函数(d){
返回d.active;
})
如果(!rect.empty()){
var circle=d3。选择(此项);
矩形属性(“填充”,内插颜色(矩形,圆));
圈。删除();
}
否则{
d3.选择(this).style(“指针事件”、“全部”);
}
}
函数插值颜色(r,c){
返回d3.B(r.attr(“填充”)、c.attr(“填充”))(0.5)
}
svg{
笔画:黑色;
笔画宽度:2px;
}