Я добавляю circles
к сюжету, используя D3.js, круги должны быть добавлены с таймаутом (для анимации), поэтому я использую setTimeout
.D3 - как выбрать недавно добавленный элемент
Эти круги также должны иметь зарегистрированные mouseover
и click
обработчики событий, но я не могу выбрать недавно добавленный элемент для регистрации on
прослушивателей.
Вот код:
(salesDataToPlot.graphObj.eventData).forEach(
function(d,i){
setTimeout(
function(){
console.log(d.collectTime);
svg.append("circle")
.transition()
.duration(1000)
.attr("cx", function() {
//console.log(new Date(d.collectTime.substr(0,10)));
return xScale(new Date(d.collectTime.substr(0,10)));
})
.attr("cy", function() {
//console.log(d.value);
return yScale((d.value - min)/(max-min));
})
.attr("r", function() {
return 5;
})
.attr("clip-path","url(#clip)")
.attr("class","circle")
//.attr("ng-class","{ 'graphClass':!chartData.graphObj.showEventMarkers }")
.style("fill", eventStrokeColor)
;
}, 1000+ i*100);
});
Этот код добавляет круги с тайм-аут.
Теперь я не знаю, где и как добавить код для on
слушателей, как
.on("mouseover", function(d)
{
tooltip.style("visibility", "visible");
tooltip.style("background-color",eventStrokeColor);
tooltip.html("<div style='color:black'>" + d.eventType + "</div>" + d.eventSentence);
})
Кажется, что вы подключаете слушателей к элементу svg, а не по кругам. – gaurav5430
Нет gaurav. Кирилл подключил слушателей к кругам. Обратите внимание, что функция 'append' возвращает сами добавленные элементы. – Gilsha
ok .... глядя на код ... казалось, что слушатели прикреплены к элементу svg ... но на самом деле это работает хорошо. – gaurav5430