Я хочу реализовать выбор узла дерева вместе с масштабированием/панорамированием. Учитывая, что зум/панорама конфликтует с выбором узлов с помощью мыши (перетаскивание) I реализовано как два отдельных прослушивателя, между которыми я могу переключаться с помощью клавиши CTRL . Как это:D3 объединение выбора с масштабированием/панорамированием
function toggleSelectZoom() {
if (useZoom) {
useZoom = false;
zoomListener.on("zoom", null);
container.classed("select", true)
.on("mousedown.select", startNodeSelection)
.on("mousemove.select", nodeSelection)
.on("mouseup.select", endNodeSelection);
} else {
useZoom = true;
container.classed("select", false)
.on("mousedown.select", null)
.on("mousemove.select", null)
.on("mouseup.select", null);
zoomListener.on("zoom", zoom);
}
}
document.onkeydown = function(e) { if (e.ctrlKey) { toggleSelectZoom(); }};
Но есть проблема: при переключении для увеличения/панорамирования режима после рисования рамки выбора в режиме выбора, дерево (при запуске панорамирования) переходит на положение, в котором он бы после тех же манипуляций в режиме масштабирования/панорамирования. Здесь находится скрипка http://jsfiddle.net/PSVW6/2/
Как я могу сбросить внутреннее состояние поведения изображения без изменения текущих свойств перевода/масштабирования? Второй вариант не соответствует моим потребностям, потому что мне нужно уметь перетаскивать узлы. – SpiegS
Вам нужно будет установить 'zoom.translate()' и 'zoom.scale()'. –
Спасибо! Это сделало трюк :) – SpiegS