Я реализовал карту в svg-элементе с функцией меркатора d3.js. На карте представлен только конкретный город - все, что находится за пределами карты города, не имеет отношения к моему проекту.
Теперь я хочу реализовать на этой карте некоторые функции, такие как zoom() и drag().
Но я не могу найти никакого решения, чтобы обработать функцию drag() с моей картой меркатора - я не могу ограничить область преобразования. (пользователь не должен иметь возможность перетаскивать карту за пределы карты города)
Для обычных svg-элементов это работает:
var drag = d3.behavior.drag()
.on("drag", dragmove);
function dragmove(d) {
var x = Math.max(0, Math.min('width-of-svg-element', d3.event.x));
var y = Math.max(0, Math.min('height-of-svg-element', d3.event.y));
d3.select(this)
.attr("transform", "translate(" + x + "," + y + ")");
}
Но это не работает для моей карты Меркатора.
пожалуйста, помогите мне :(
Заранее спасибо!
Вот небольшой пример: https://jsfiddle.net/c55w7u9e/
Мое намерение состоит в том, чтобы у пользователя не было возможности перетащить красный круг (в этом примере, но в моем проекте карта) за пределы элемента svg...