Я пытаюсь изучить D3, экспериментируя с одним из своих базовых пузырьков. Первая задача: выяснить, как перетащить пузырь и стать ли он самым верхним объектом во время его перетаскивания. (Проблема заключается в том, что объектная модель D3 будет отображаться на DOM, но я туда доберусь...)
Чтобы перетащить его, мы можем просто вызвать поведение перетаскивания d3 с помощью кода, который они предоставляют:
var drag = d3.behavior.drag()
.on("dragstart", dragstart)
.on("drag", dragmove)
.on("dragend", dragend);
Отлично работает. Хорошо перетаскивается. Теперь, как мы получим, что это самый верхний элемент? Найдите здесь "svg z-index", и становится очевидным, что единственный способ изменить индекс - переместить объект дальше в DOM. ОК. Они не облегчают работу, потому что у отдельных пузырьков нет идентификаторов, но возиться с консолью, мы можем найти один из этих объектов пузырьков:
$("text:contains('TimeScale')").parent()
и мы можем переместить его в конец содержащего svg элемента с помощью:
.appendTo('svg')
Перетащите его после этого, и это самый верхний элемент. Пока что так хорошо, если вы полностью работаете в DOM.
НО: то, что я действительно хочу сделать, это то, что происходит автоматически, когда данный объект/пузырь перетаскивается. D3 предоставляет модель для функций dragstart()
и dragend()
, которые позволят нам встроить инструкцию для выполнения того, что мы хотим во время процесса перетаскивания. И D3 предоставляет синтаксис d3.select(this)
, который позволяет нам получить доступ к представлению объектов d3 объекта/пузыря, который вы сейчас перетаскиваете. Но как я могу почистить этот массивный массив, который они возвращают, в ссылку на элемент DOM, с которым я могу взаимодействовать, и, например, переместить его в конец контейнера SVG или выполнить другие ссылки в DOM, такие как отправка формы