Я использую OpenSeaDragon (OSD) 2.3.1 с D3v4 для нанесения точек поверх изображений. Эти точки рисуются, когда пользователь нажимает на изображение.
Вопрос в том, как сделать эти объекты d3 перетаскиваемыми в OSD.
Проблема возникает из-за того, что OSD должно обрабатывать все действия мыши для взаимодействия со средством просмотра изображений.
В настоящее время мой обработчик мыши для захвата события
var click_handler= function(event) {
if(event.quick){
drawMarker(...); //this works fine
}else{
...
}
};
Затем я использую OSD MouseTracker, чтобы установить обработчик
var fixed_mouse_tracker = new OpenSeadragon.MouseTracker({
element: OSDviewer.canvas,
clickHandler: click_handler
}).setTracking(true);
Это прекрасно работает, если мне не нужно перетаскивать элементы. Поскольку теперь все щелчки будут обрабатываться OSD, в то время как объекты D3 не знают, что они нажаты. я пытался использовать
d3.select("elementclass").on('mouseup', function(){console.log(d3.mouse(this)[0], d3.mouse(this)[1])});
но это не работает.
Другой возможностью является использование OSD-события event.originalEvent. И мне нужно знать, как захватить указатель this
, указывающий на элемент d3, по которому щелкнули.
Я нашел этот пример D3, но не знаю, как его применить