Я создал график силы с элементами DOM, а не узлами, но теперь я хочу, чтобы у вас есть возможность щелкнуть по ним, чтобы наделить центр тем, на который я нажимаю. Весь график можно перетаскивать, но пока подразумевается перетаскивание, я не могу щелкнуть элементы, которые можно перетаскивать, если я прокомментирую функции перетаскивания, которые я могу щелкнуть, просто отлично.D3 v4 нажмите на элементы, которые можно перетаскивать
В этом примере все перемещается, но предупреждение() не срабатывает, если оно находится на элементе изображения. Если я удаляю перетаскивание из элемента newNode, срабатывает alert().
function restart() {
//If there were already created nodes, remove them
if (created) {
created.remove();
}
// Apply the general update pattern to the nodes.
node = node.data(self.nodes(), function(d) { return d.id; });
//Add a group
//When dragged you're not able to click on anything
var newNode = node.enter().append("g").attr("class", "node").attr("transform", "translate(-42,-55)").call(d3.drag()
.on("start", dragstarted)
.on("drag", dragged)
.on("end", dragended));
//Add background rect
nodeSquare = newNode.append("rect")
.attr("width", "84px")
.attr("height", "110px")
.style("fill", 'red');
//Add an image
imageNode = newNode.append("image")
.attr("xlink:href", function (d) { return d.imageUrl; })
.attr("transform", "translate(2,2)")
.attr("height", 80)
.attr("width", 80);
imageNode.on("click", function (d) { alert("center me!"); d3.event.stopPropagation();});
//TODO: ALIGN CENTER
//.attr("x", function(d){ if(d.name == self.entityData.properties.Title) return 0;}).attr("y", function(d){ if(d.name == self.entityData.properties.Title) return 0;})
//Add text
nodeText = newNode.append("a")
.attr("width", 2)
.attr("word-wrap", "break-word")
.attr("height", 10)
.attr("href", function (d) { if (d.href) return d.href; else return "https://i.ytimg.com/vi/jhvAXT9R_3U/hqdefault.jpg"; })
.style('stroke', 'white')
.append("text").text(function (d) { return d.name.substring(0, 10); }).attr("dy", function (d) { return +100 }).attr("dx", function (d) { return +10; });
//Change the text style to be less thick
nodeText.style("stroke-width", 0.5).style("font-size", "12px");
//save the created nodes to be able to delete them as soon as this function is called upon again
created = newNode;
// Apply the general update pattern to the links.
link = link.data(self.links());
link.exit().remove();
link = link.enter().append("line").merge(link);
// Update and restart the simulation.
simulation.nodes(self.nodes());
simulation.force("link").links(self.links());
simulation.alpha(1).restart();
}
Вы должны использовать 'd3.event.defaultPrevented'. Mike Bostock [* Click vs. Drag *] (https://bl.ocks.org/mbostock/a84aeb78fea81e1ad806) обеспечивает рабочую демонстрацию. – altocumulus
Насколько я понял, это учебное пособие, defaultPrevented используется, чтобы событие click не запускалось при перетаскивании. Но проблема в том, что она на самом деле уже не срабатывает вообще. – Akorna
У меня такая же проблема, она работает на MacOS, но не работает в Windows. – supNate