Как вы можете видеть, в этом примере D3 v3 selection.on
...
paths.on(eventObj)
... получает объект со всеми слушателями типа:
var eventObj = {
'mouseover': function(d, i, j) {
//etc...
},
'mouseout': function(d, i, j) {
//etc...
},
'click': function(d, i, j) {
//etc...
}
};
И здесь кроется проблема: это работает в D3 v3, но не в v4.
Посмотрите на эту демонстрацию, используя D3 v3 (наведите курсор на круг):
const events = {
"mouseover": function() {
console.log("mouseover")
},
"mouseout": function() {
console.log("mouseout")
}
};
d3.select("circle").on(events)
<script src="https://cdnjs.cloudflare.com/ajax/libs/d3/3.5.17/d3.min.js"></script>
<svg>
<circle cx="100" cy="50" r="25"></circle>
</svg>
Теперь точно такой же код, но с использованием D3 v4:
const events = {
"mouseover": function() {
console.log("mouseover")
},
"mouseout": function() {
console.log("mouseout")
}
};
d3.select("circle").on(events)
<script src="https://cdnjs.cloudflare.com/ajax/libs/d3/4.13.0/d3.min.js"></script>
<svg>
<circle cx="100" cy="50" r="25"></circle>
</svg>
Не работает.Он не выдает никакой ошибки, он просто молча терпит неудачу.
Решение : установите каждого слушателя событий отдельно:
paths.on("mouseover", etc...)
.on("mouseout", etc...)
.on("click", etc...);