Выделите состояние в Choropleth - PullRequest
3 голосов
/ 09 ноября 2019

Я следую этому примеру: http://bl.ocks.org/ElefHead/ebff082d41ef8b9658059c408096f782

Однако я не понимаю, почему, когда я просто рисую 3 вещи (округа, штаты, государственные границы). Когда состояние наведено, я просто хочу изменить цвет заливки и сделать процесс более плавным.

jsfiddle здесь: https://jsfiddle.net/kick_out/jq3w6xft/10/

Текущий код имеет тот же стиль CSS, что и пример bl.ocks: Когда я удаляю часть округа, у меня не выделяется подсветка.

.county-boundary:hover, .state:hover {
  fill: orange
}

1 Ответ

3 голосов
/ 10 ноября 2019

Прежде всего, класс состояний state, а не states. Но этот вопрос - не просто вопрос опечатка , здесь есть большая проблема:

Вы устанавливаете заполнение состояний на none (используя их родительскую группу CSS). Вот почему твое зависание не имеет никакого эффекта. В SVG значением по умолчанию pointer-events является visiblePainted, , в котором :

Элемент может быть целью события указателя, только если установлено свойство видимостивидимым и, например, когда курсор мыши находится над внутренней частью (т. е. «заливка») элемента, а для свойства fill установлено значение , отличное от none . (выделение мое)

Поэтому вы должны установить для их pointer-events значение all.

Также, если вы хотите показать округа, измените порядок добавления.

Вот ваш код с этими изменениями:

async function drawMap() {
  var svg = d3.select("body").append('svg')
    .attr("height", 600)
    .attr("width", 1000)

  var map = await d3.json('https://d3js.org/us-10m.v1.json')
  var path = d3.geoPath()
  var mouseOver = function(d) {
    d3.select(this)
  }
  var mouseOut = function(d) {}
  svg.append("g")
    .attr('id', 'counties')
    .selectAll("path")
    .data(topojson.feature(map, map.objects.counties).features)
    .enter().append("path")
    .attr("d", path)
    .attr("class", "county-border")
  svg.append("g")
    .attr("id", "states")
    .selectAll("path")
    .data(topojson.feature(map, map.objects.states).features)
    .enter().append("path")
    .attr("d", path)
    .attr('class', 'states')

  svg.append("g")
    .attr("id", "states")
    .selectAll("path")
    .data(topojson.feature(map, map.objects.states).features)
    .enter().append("path")
    .attr("d", path)
    .attr("class", "state")
    .attr("pointer-events", "all");

  svg.append("g")
    .attr("id", "counties")
    .selectAll("path")
    .data(topojson.feature(map, map.objects.counties).features)
    .enter().append("path")
    .attr("d", path)
    .attr("class", "county-boundary")
    .attr("pointer-events", "none")
}
drawMap()
#states {
  fill: none;
  stroke: green;
  stroke-width: 1.9px;
}

#states .active {
  display: none;
}

#state-borders {
  fill: none;
}

#counties {
  fill: none;
}

.county-boundary {
  fill: none;
  stroke: lightgrey;
  stroke-width: 0.7px;
}

.state:hover {
  fill: orange;
}

#sliderContainer {
  text-align: center;
  position: relative;
  left: 10px;
}
<!DOCTYPE html>
<html lang="en">
  <title>County Map</title>

  <body>
    <div id="wrap"></div>
    <script src="https://d3js.org/d3.v5.js"></script>
    <script src="https://d3js.org/topojson.v3.min.js"></script>
    <script src="map.js"></script>
  </body>

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