클릭이 시작되는 첫 번째 선택에는 드래그 기능이 적용되지 않습니다.

매튜 스넬

다음 코드는 mousemove 및 mouseclick을 통해 카운티를 강조 표시하기위한 것입니다. 코드는 대부분 올바르게 작동하며 해결하는 데 문제가있는 유일한 문제는 마우스를 클릭하고 움직일 때 첫 번째 선택이 강조 표시되지 않고 건너 뛰는 것입니다 (돌아가서 클릭하여 선택할 수 있지만 성가시다. 처음부터 선택하지 마십시오).

도와 주셔서 감사합니다.

<!DOCTYPE html>
<title>Heartland Remapping Tool</title>
<link rel="shortcut icon" type="image/png" href="/faviconpng.png"/>
<style>
svg{
  width:100%;
  height: auto;
}
.counties, .unhovered {
  fill: white;
  stroke: #7887AB;
  stroke-width: .5px;
}
.counties .hovered, .counties :hover {
  fill: #061539;
  stroke-width: 0px;
}
.selected {
  fill: #061539;
}
.deselected {
  fill: white;
}
.deselected :hover {
  fill: white;
}
.county-borders {
  fill: none;
  stroke: #F0F8FF;
  stroke-width: .2px;
  stroke-linejoin: round;
  stroke-linecap: round;
  pointer-events: none;
}
.state-borders {
  fill: none;
  stroke: #162955;
  opacity: .8;
  stroke-linejoin: round;
  stroke-linecap: round;
  pointer-events: none;
}
</style>
<svg width="960" height="600"></svg>
<script src="https://d3js.org/d3.v4.min.js"></script>
<script src="https://d3js.org/topojson.v2.min.js"></script>
<script>
var svg = d3.select("svg");
var path = d3.geoPath();
var clickDown = true;
var numSelectedCounties = 0;
var selectedCounties = {};

d3.json("https://d3js.org/us-10m.v1.json", function(error, us) {
  if (error) throw error;
  svg.append("g")
      .attr("class", "counties")
      .selectAll("path")
      .data(topojson.feature(us, us.objects.counties).features)
      .enter()
      .append("path")
      .attr("d", path);

  svg.append("g")
      .attr("class", "state-borders")
      .selectAll("path")
      .data(topojson.feature(us, us.objects.nation).features)
      .enter()
      .append("path")
      .attr("d", path);
  svg.append("path")
      .attr("class", "state-borders")
      .attr("d", path(topojson.mesh(us, us.objects.nation, function(a, b) { return a !== b; })));
  svg.append("path")
      .attr("class", "state-borders")
      .attr("d", path(topojson.mesh(us, us.objects.states, function(a, b) { return a !== b; })));
  svg.append("path")
      .attr("class", "county-borders")
      .attr("d", path(topojson.mesh(us, us.objects.counties, function(a, b) { return a !== b; })));

//Clicking stuff below.

  let hoverEnabled = false;

  svg.selectAll('.counties path')
  .on('mousedown', x => hoverEnabled = true)
  .on('mouseup', x => hoverEnabled = false)
  .on('mouseover', function() {
    if (hoverEnabled) {
      if (!d3.select(this).classed('hovered')) {
        d3.select(this).classed('hovered', true);
        numSelectedCounties++;
      }
    }
  })
  .on('click', function() {
      if (d3.select(this).classed('hovered')) {
        d3.select(this).classed('hovered', false);
        numSelectedCounties--;
      }
      else {
        d3.select(this).classed('hovered', true);
        numSelectedCounties++;
      }
  })
  });
</script>

당신에 mousedown당신은 당신이 끌고 있는지 확인하기 위해 플래그를 설정; 그런 다음 mouseover색상 설정합니다. mouseover방금 마우스 다운 한 카운티에 대한 이벤트가 이미 발생 했으므로 색상을 설정하지 않을 것입니다.

모든 이벤트 처리를 단순화하여 다음을 수행합니다.

let hoverEnabled = false;
svg.selectAll('.counties path')
  .on('mousedown', function(){
    var self = d3.select(this);
    hoverEnabled = !self.classed('hovered');
    self.classed('hovered', hoverEnabled);
  })
  .on('mouseup', function(){ hoverEnabled = false; })
  .on('mouseover', function() {
    if (hoverEnabled){
      d3.select(this).classed('hovered', true);
    }
  });

또한 나는 "선택된 카운티"의 수를 유지하는 것을 귀찮게하지 않을 것입니다. 다음과 같이 필요할 때 알아내는 것이 더 깨끗합니다.

d3.selectAll('.hovered').size();

실행 코드 :

<!DOCTYPE html>
<title>Heartland Remapping Tool</title>
<link rel="shortcut icon" type="image/png" href="/faviconpng.png"/>
<style>
svg{
  width:100%;
  height: auto;
}
.counties, .unhovered {
  fill: white;
  stroke: #7887AB;
  stroke-width: .5px;
}
.counties .hovered, .counties :hover {
  fill: #061539;
  stroke-width: 0px;
}
.selected {
  fill: #061539;
}
.deselected {
  fill: white;
}
.deselected :hover {
  fill: white;
}
.county-borders {
  fill: none;
  stroke: #F0F8FF;
  stroke-width: .2px;
  stroke-linejoin: round;
  stroke-linecap: round;
  pointer-events: none;
}
.state-borders {
  fill: none;
  stroke: #162955;
  opacity: .8;
  stroke-linejoin: round;
  stroke-linecap: round;
  pointer-events: none;
}
</style>
<svg width="960" height="600"></svg>
<script src="https://d3js.org/d3.v4.min.js"></script>
<script src="https://d3js.org/topojson.v2.min.js"></script>
<script>
var svg = d3.select("svg");
var path = d3.geoPath();
var clickDown = true;
var numSelectedCounties = 0;
var selectedCounties = {};

d3.json("https://d3js.org/us-10m.v1.json", function(error, us) {
  if (error) throw error;
  svg.append("g")
      .attr("class", "counties")
      .selectAll("path")
      .data(topojson.feature(us, us.objects.counties).features)
      .enter()
      .append("path")
      .attr("d", path);

  svg.append("g")
      .attr("class", "state-borders")
      .selectAll("path")
      .data(topojson.feature(us, us.objects.nation).features)
      .enter()
      .append("path")
      .attr("d", path);
  svg.append("path")
      .attr("class", "state-borders")
      .attr("d", path(topojson.mesh(us, us.objects.nation, function(a, b) { return a !== b; })));
  svg.append("path")
      .attr("class", "state-borders")
      .attr("d", path(topojson.mesh(us, us.objects.states, function(a, b) { return a !== b; })));
  svg.append("path")
      .attr("class", "county-borders")
      .attr("d", path(topojson.mesh(us, us.objects.counties, function(a, b) { return a !== b; })));

  let hoverEnabled = false;
  svg.selectAll('.counties path')
  .on('mousedown', function(){
    var self = d3.select(this);
    hoverEnabled = !self.classed('hovered');
    self.classed('hovered', hoverEnabled);
  })
  .on('mouseup', function(){ hoverEnabled = false; })
  .on('mouseover', function() {
    if (hoverEnabled){
      d3.select(this).classed('hovered', true);
    }
  });
});

</script>

이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.

침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

분류에서Dev

Onclick 자바 스크립트 기능이 첫 번째 클릭에서 작동하지 않습니다.

분류에서Dev

첫 번째 클릭에 대해서만 "img"클래스 순환이 작동하지만 다른 클릭에는 작동하지 않습니다.

분류에서Dev

클릭 기능이 두 번 호출되지만 첫 번째 클릭에서만 호출됩니까?

분류에서Dev

Python 및 Selenium을 사용하여 웹 사이트에 여러 파일을 업로드하려고 시도하지만 첫 번째 파일 만 선택되고 다른 파일은 선택되지 않습니다. 그 이유는 무엇입니까?

분류에서Dev

첫 번째 클릭에서 양식 제출이 작동하지 않습니다.

분류에서Dev

버튼 onclick이 첫 번째 클릭에서 작동하지 않습니다.

분류에서Dev

툴바의 첫 번째 버튼 이미지에는 이미지 스타일이 적용되지 않습니다.

분류에서Dev

Jquery 그리드는 첫 번째 클릭에서만로드되고 후속 클릭에서는 다시로드되지 않습니다.

분류에서Dev

JQuery on ( "submit")이 첫 번째 클릭에서 실행되지 않음

분류에서Dev

p : first-child 가상 클래스가 p 요소의 첫 번째 자식에 적용되지 않는 이유

분류에서Dev

첫 번째 플러터 이미지가 표시되지만 두 번째는 표시되지 않습니다.

분류에서Dev

jquery, 클래스가로드되었는지 확인하는 방법. 그런 다음 첫 번째 클릭 후 숨기도록 기능 변경

분류에서Dev

Jquery-첫 번째 클릭시 이미지가로드되지 않음

분류에서Dev

첫 번째 클릭에서 작동하지 않는 클릭 기능의 일부

분류에서Dev

슬라이더에 jQuery를 사용하면 첫 번째는 작동하지만 두 번째는 그렇지 않습니다. 필요한 동적 요소

분류에서Dev

CSS 선택기 첫 번째 자식이 작동하지 않습니다.

분류에서Dev

첫 번째 if 문은 파이썬에서 무시되지만 elif에서는 무시되지 않습니다.

분류에서Dev

컴퓨터가 시작될 때 무선이 활성화되지 않습니다. 첫 번째 최대 절전 모드 후에 작동합니다.

분류에서Dev

컴퓨터가 시작될 때 무선이 활성화되지 않습니다. 첫 번째 최대 절전 모드 후에 작동합니다.

분류에서Dev

컴퓨터가 시작될 때 무선이 활성화되지 않습니다. 첫 번째 최대 절전 모드 후에 작동합니다.

분류에서Dev

HTML 테이블의 첫 번째 클릭에서 onclick ()이 작동하지 않습니다.

분류에서Dev

Navbar는 첫 번째 클릭에서 활성 Li를 업데이트하지 않습니다.

분류에서Dev

jquery 라디오 버튼이 첫 번째 클릭에서 이벤트를 발생시키지 않습니다.

분류에서Dev

첫 번째 클릭시 이미지를 인쇄하면 이미지가 표시되지 않습니다.

분류에서Dev

첫 번째 글꼴이로드되지 않는 경우에만 글꼴 스타일 적용

분류에서Dev

JQuery는 첫 번째 클릭시 실행되지 않지만 두 번째 클릭시 실행됩니다.

분류에서Dev

Python 프로그램은 첫 번째 사용자 입력 이후에 실행되지 않습니다.

분류에서Dev

반응 라디오 버튼이 첫 번째 클릭에서 작동하지 않습니다.

분류에서Dev

MaterialUI FormControl API TextField의 첫 번째 클릭에서 onClick이 작동하지 않습니다.

Related 관련 기사

  1. 1

    Onclick 자바 스크립트 기능이 첫 번째 클릭에서 작동하지 않습니다.

  2. 2

    첫 번째 클릭에 대해서만 "img"클래스 순환이 작동하지만 다른 클릭에는 작동하지 않습니다.

  3. 3

    클릭 기능이 두 번 호출되지만 첫 번째 클릭에서만 호출됩니까?

  4. 4

    Python 및 Selenium을 사용하여 웹 사이트에 여러 파일을 업로드하려고 시도하지만 첫 번째 파일 만 선택되고 다른 파일은 선택되지 않습니다. 그 이유는 무엇입니까?

  5. 5

    첫 번째 클릭에서 양식 제출이 작동하지 않습니다.

  6. 6

    버튼 onclick이 첫 번째 클릭에서 작동하지 않습니다.

  7. 7

    툴바의 첫 번째 버튼 이미지에는 이미지 스타일이 적용되지 않습니다.

  8. 8

    Jquery 그리드는 첫 번째 클릭에서만로드되고 후속 클릭에서는 다시로드되지 않습니다.

  9. 9

    JQuery on ( "submit")이 첫 번째 클릭에서 실행되지 않음

  10. 10

    p : first-child 가상 클래스가 p 요소의 첫 번째 자식에 적용되지 않는 이유

  11. 11

    첫 번째 플러터 이미지가 표시되지만 두 번째는 표시되지 않습니다.

  12. 12

    jquery, 클래스가로드되었는지 확인하는 방법. 그런 다음 첫 번째 클릭 후 숨기도록 기능 변경

  13. 13

    Jquery-첫 번째 클릭시 이미지가로드되지 않음

  14. 14

    첫 번째 클릭에서 작동하지 않는 클릭 기능의 일부

  15. 15

    슬라이더에 jQuery를 사용하면 첫 번째는 작동하지만 두 번째는 그렇지 않습니다. 필요한 동적 요소

  16. 16

    CSS 선택기 첫 번째 자식이 작동하지 않습니다.

  17. 17

    첫 번째 if 문은 파이썬에서 무시되지만 elif에서는 무시되지 않습니다.

  18. 18

    컴퓨터가 시작될 때 무선이 활성화되지 않습니다. 첫 번째 최대 절전 모드 후에 작동합니다.

  19. 19

    컴퓨터가 시작될 때 무선이 활성화되지 않습니다. 첫 번째 최대 절전 모드 후에 작동합니다.

  20. 20

    컴퓨터가 시작될 때 무선이 활성화되지 않습니다. 첫 번째 최대 절전 모드 후에 작동합니다.

  21. 21

    HTML 테이블의 첫 번째 클릭에서 onclick ()이 작동하지 않습니다.

  22. 22

    Navbar는 첫 번째 클릭에서 활성 Li를 업데이트하지 않습니다.

  23. 23

    jquery 라디오 버튼이 첫 번째 클릭에서 이벤트를 발생시키지 않습니다.

  24. 24

    첫 번째 클릭시 이미지를 인쇄하면 이미지가 표시되지 않습니다.

  25. 25

    첫 번째 글꼴이로드되지 않는 경우에만 글꼴 스타일 적용

  26. 26

    JQuery는 첫 번째 클릭시 실행되지 않지만 두 번째 클릭시 실행됩니다.

  27. 27

    Python 프로그램은 첫 번째 사용자 입력 이후에 실행되지 않습니다.

  28. 28

    반응 라디오 버튼이 첫 번째 클릭에서 작동하지 않습니다.

  29. 29

    MaterialUI FormControl API TextField의 첫 번째 클릭에서 onClick이 작동하지 않습니다.

뜨겁다태그

보관