Удалить всплывающую подсказку d3 - PullRequest
0 голосов
/ 10 октября 2019

Я использую диаграммы d3, чтобы показать график рассеяния. Я показываю всплывающую подсказку при нажатии. Я должен удалить всплывающую подсказку, если щелкну где-нибудь на странице. Как мне удалить всплывающую подсказку?

var svg = d3.select("#scatter_plot")
  .append("svg")
  .attr("width", chart_width)
  .attr("height", chart_height)
// create x_scale

var div = d3.select("body").append("div")
  .attr("class", "tooltip1 scatter_tooltip")
  .style("opacity", 0);
// add circles
svg.selectAll("circle")
  .data(data)
  .enter()
  .append("circle")
  .attr("cx", function (d) {
    return x_scale(d.Staff_count)
  })
  .attr("cy", function (d) {
    return y_scale(d.Outlets)
  })
  .attr("r", function (d) {
    return a_scale(d.Total_Sales)
  })
  .attr("fill", function (d) { return scatter_color(d.Total_Sales) })
  .on("click", function (d) {
    var div_html = "<div class='d-flex justify-content-center m-2'><div class='font-weight-bolder pr-2'>"
    var div_end =  "<hr>" + "</div></div>" + div_html + "Total Sales" + ": " + d.Total_Sales + "</div></div>" + "</div></div>"+ div_html + "Outlets" + ": " + d.Outlets + "</div></div>" + "</div></div>"+ div_html + "Staff Count" + ": " + d.Staff_count
    $(".tooltip1").show()
    div.transition()
      .duration(100)
      .style("opacity", .9);
    if (state_ == 'India') {
      div.html(div_html + d.State + div_end + "</div></div>" + "<button class = 'myBtn btn btn-primary' id='" + d.State + "'>District Details >></button>")
        .style("left", (d3.event.pageX) + "px")
        .style("top", (d3.event.pageY - 28) + "px");
    } else {
      div.html(div_html + d.District + div_end)
        .style("left", (d3.event.pageX) + "px")
        .style("top", (d3.event.pageY - 28) + "px");
    }
    tooltip_load()
    toolTipIsVisible()
  })

Было бы полезно, если бы кто-нибудь дал некоторое представление о том, как это решить.

1 Ответ

0 голосов
/ 10 октября 2019

Вы можете прослушивать событие щелчка на теле или документе как глобальный обработчик события щелчка, в этом обработчике вы можете скрыть всплывающую подсказку. Внутри обработчика события щелчка по кругу необходимо остановить распространение события щелчка по телу или документу, вызвав d3.event.stopPropagation()

Пример кода:

  .attr("fill", function (d) { return scatter_color(d.Total_Sales) })
  .on("click", function (d) {
    var div_html = "<div class='d-flex justify-content-center m-2'><div class='font-weight-bolder pr-2'>"
    var div_end =  "<hr>" + "</div></div>" + div_html + "Total Sales" + ": " + d.Total_Sales + "</div></div>" + "</div></div>"+ div_html + "Outlets" + ": " + d.Outlets + "</div></div>" + "</div></div>"+ div_html + "Staff Count" + ": " + d.Staff_count
    $(".tooltip1").show()
    div.transition()
      .duration(100)
      .style("opacity", .9);
    if (state_ == 'India') {
      div.html(div_html + d.State + div_end + "</div></div>" + "<button class = 'myBtn btn btn-primary' id='" + d.State + "'>District Details >></button>")
        .style("left", (d3.event.pageX) + "px")
        .style("top", (d3.event.pageY - 28) + "px");
    } else {
      div.html(div_html + d.District + div_end)
        .style("left", (d3.event.pageX) + "px")
        .style("top", (d3.event.pageY - 28) + "px");
    }
    tooltip_load()
    toolTipIsVisible()

    // added code
    d3.event.stopPropagation()
  })

  // global listener
  d3.select('body').on('click', resetTooltip)

  function resetTooltip() {
    // reset tooltip state
    div.style('opacity', 0)
    $(".tooltip1").hide()
  }

Вот пример:http://bl.ocks.org/jasondavies/3186840

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...