Я использую масштабирование колесика мыши в моей карте d3. Использование кода используется.
.on("wheel.zoom", function() {
var currScale = projection41039.scale();
var newScale = currScale - 1 * event.deltaY;
if (newScale >= 150) {
var currTranslate = projection41039.translate();
var coords = projection41039.invert([event.offsetX, event.offsetY]);
projection41039.scale(newScale);
var newPos = projection41039(coords);
projection41039.translate([currTranslate[0] + (event.offsetX - newPos[0]),
currTranslate[1] + (event.offsetY - newPos[1])
]);
updateContents();
}
})
Это отлично работает для Chrome, но вызывает ошибку в Firefox:
ReferenceError: событие не определено
Проблема здесь в том, что Chrome следует за функцией Internet Explorer Window.event, в то время как Firefox не работает:
Например, с помощью кнопки или любого другого элемента следующий сниппет будет работать в Chrome, но не в Firefox:
d3.select("button").on("click", function() {
console.log(event)
})
Попробуйте здесь: https://jsfiddle.net/b9h4ntn0/ (Обычно я использую Stack Snippets, но фрагмент будет зависеть в этом конкретном примере)
Решение
Используйте d3.event
. Таким образом, вы не полагаетесь на Window.event
:
d3.select("button").on("click", function() {
console.log(d3.event)
})
Следующий код работает как в Chrome, так и в Firefox: https://jsfiddle.net/qj787zmj/