#javascript #d3.js
#javascript #d3.js
Вопрос:
У меня возникли проблемы с некоторыми переходами d3. При нажатии на SVGCircleElement я хочу, чтобы SVGTextElement в том же SVGGElement, что и круг, исчезал, и как только это закончится, я хочу, чтобы появилось информационное окно. Вот соответствующий код.
// code where vizNode is defined
// Circle is the SVGCircleElement
var circle = vizNode.svgNode
var drag = d3.drag()
.on('start', function () {
dragStart(this)
})
.on('drag', dragMove)
.on('end', dragEnd);
function dragStart(d) { //drag start logic }
function dragMove(d) { //drag move logic }
function dragEnd(d) { //drag end logic }
// Call drag method on SVGCircleElement
d3.select(circle).call(drag)
// g is the SVGGElement containing the SVGTextElement with the circle and class '.node-text'
var g = d3.select(circle.parentNode)
g.selectAll('.node-text').transition()
.duration(longFade)
.style('opacity', 0)
.on('start', function () {
vizNode.infoBoxFadeIn = true
})
.on('end', function () {
vizNode.infoBoxFadeIn = false
drawNewInfoBox(vizNode)
})
//drawNewInfoBox method
Сначала это работает так, как ожидалось. Однако пользователь может перетаскивать круги, используя другой метод. После этого описанный выше метод внезапно перестает работать — функция .on (‘start) больше не вызывается.
Теперь большая проблема в том, что я понятия не имею, как это отладить. Все соответствующие переменные и объекты остаются неизменными, и выделение d3, которое я пытаюсь перенести, все еще существует после перетаскивания.
Есть ли у кого-нибудь советы о том, как подойти к этой проблеме?
РЕДАКТИРОВАТЬ: Обновленный код, чтобы включить метод перетаскивания
Комментарии:
1. Вероятно, вам потребуется предоставить немного больше кода, чтобы воспроизвести проблему (например, как вы выполняете перетаскивание?). Я бы предположил, что ваш
start
обработчик событий переопределяется обработчиками событий перетаскивания.2. @Mark Звучит так, будто это может быть объяснением. Я добавил еще несколько фрагментов кода. Дайте мне знать, если вам понадобится дополнительная информация, чтобы разобраться в этом. Спасибо за помощь!