У меня есть визуализация d3.js (v5 с использованием промисов), над которой я работаю. Не лучший в javascript, и, возможно, это потому, что я слишком долго смотрел на экран, но я не могу заставить этот оператор else запускаться для событий dblclick.
// react to double click .on() event
function doubleclicked(d) {
if (d.fx == null & d.fy == null){
console.info("d.fx and d.fy are null, fixing point");
d.fx = d.x;
d.fy = d.y;
d3.select(this).select("text").transition()
.duration(750)
.attr("x", 22)
.style("stroke", "black")
.style("font", "10px sans-serif")
.style("font-weight", "normal")
.style("weight", "normal")
.style("pointer-events", "none");
d3.select(this).select("circle").transition()
.duration(750)
.attr("r", 16)
.style("stroke-width", "1.5px")
.style("fill","light gray")
.style("stroke","black");
} else{
console.info('whyyyy wont this work');
// you can set null, or delete d.fx, delete d.fy keys
d.fx = null;
d.fy = null;
d3.select(this).select("text").transition()
.duration(750)
.attr("x", 22)
.style("stroke", "blue")
.style("stroke-width", ".5px")
.style("font", "20px sans-serif");
d3.select(this).select("circle").transition()
.duration(750)
.attr("r", 16);};
};
В документации и SO-ссылке здесь я могу успешно установить узел в фиксированное положение (если оператор выполняется). Но я не могу заставить оператор else сработать, и я уверен, что это какая-то глупость, которую я упускаю из виду. У кого-нибудь есть идеи?
Я добавил свои функции перетаскивания, так как чувствую, что это как-то связано с этим.
function dragstarted(d) {
console.info('drag start');
if (!d3.event.active) force.alphaTarget(0.3).restart();
d.fx = d.x;
d.fy = d.y;
};
function dragged(d) {
console.info('drag mid');
d.fx = d3.event.x;
d.fy = d3.event.y;
};
function dragended(d) {
console.info('drag end');
if (!d3.event.active) force.alphaTarget(0);
if (d.fx == null && d.fy ==null){
d.fx = d.x;
d.fy = d.y;
}
else{
d.fx = null;
d.fy = null;
}
Хорошо, у меня было ощущение, что это может быть связано с этим, что было бы хорошим способом предотвратить перетаскивание, прерывающее двойной щелчок?
d.fx == null & d.fy == null это опечатка? В JavaScript & отличается от &&.
внесли все необходимые изменения, чтобы скрипт запустился. @GerardoFurtado Я внес изменения (хороший улов)
@rioV8 спасибо за подсказку.



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


во время перетаскивания вы установили
d.fx. В dragend вы очищаетеd.fx, поэтому для двойного щелчкаd.fx==nullвы не можете дважды щелкнуть при перетаскивании