2015-01-28 6 views
1

을 해제합니다 나의 작업 예입니다 http://members.upcpoczta.pl/w.racek/mapa.html리플릿 - 마우스 오버, 클릭 한 다음

내가 달성하고자하는

이다 : 그것은 지금처럼

  1. 는 마우스 오버에 하이라이트를 유지

  2. I을 강조 표시된 자전거 경로를 클릭하십시오. 기능 기능을 확대하고 싶지만 경로를 확대 할 때 선택한 경로 외부를 클릭하거나지도를 이동할 때까지 계속 강조 표시하고 싶습니다.

지금 마우스가 움직이면 강조 표시가 사라지고 클릭 한 경로를 알 수 없습니다.

+0

당신이 무엇을하려했는지 보여줄 필요가 있습니다. 더 많은 것을 읽어보십시오 : http://stackoverflow.com/help/how-to-ask – knowbody

+0

하이라이트를 유지하기 위해서, 당신은 클래스 토글 링을 사용할 수 있다고 생각합니다 (호버에 'toggleClass') 클릭하면 'addClass') – flks

답변

2

좋아, 일종의 해커지만, 그런 식으로 뭔가를 달성하는 방법의 데모로 그것을 참조하십시오. 변수 selected을 만들고 click 핸들러가 실행되면 강조된 기능을 저장합니다. 이제 mouseout 처리기에서 선택이 이루어 졌는지 확인하고 mouseout을 실행 한 레이어와 일치하는지 확인한 다음 강조 표시된 스타일을 제거하지 마십시오. 또한 click 핸들러에 일부 논리를 작성해야 선택이 이미 이루어진 경우 하이라이트가 제거됩니다.

코드 예제 : http://plnkr.co/edit/fdTnA9CyJdJejiPq2q8M?p=preview

당신은 또한 당신이 달성하고 거기에하려고하는지도 click 또는 moveend이든 UX 용 핸들러를 작성해야합니다 : 여기

function highlight (layer) { 
     layer.setStyle({ 
      weight: 5, 
      dashArray: '' 
     }); 
     if (!L.Browser.ie && !L.Browser.opera) { 
      layer.bringToFront(); 
     } 
    } 

    function dehighlight (layer) { 
     if (selected === null || selected._leaflet_id !== layer._leaflet_id) { 
      geojson.resetStyle(layer); 
     } 
    } 

    // Variable to store selection 
    var selected = null; 

    function select (layer) { 
     // See if there is already a selection 
     if (selected !== null) { 
      // Store for now 
      var previous = selected; 
     } 
     map.fitBounds(layer.getBounds()); 
     // Set new selection 
     selected = layer; 
     // If there was a previous selection 
     if (previous) { 
      // Dehighlight previous 
      dehighlight(previous); 
     } 
    } 

    var geojson = L.geoJson(rower, { 
     style: function (feature) { 
      return { 
       weight: 2, 
       opacity: 1, 
       color: feature.properties.colour, 
       dashArray: 3, 
      }; 
     }, 
     onEachFeature: function (feature, layer) { 
     layer.on({ 
      'mouseover': function (e) { 
       highlight(e.target); 
      }, 
      'mouseout': function (e) { 
       dehighlight(e.target); 
      }, 
      'click': function (e) { 
       select(e.target); 
      } 
     }); 
    } 
}).addTo(map); 

는 Plunker에 작업 예제 선택 항목이 있는지 확인한 다음 강조 표시를 제거하십시오. 그러나 개념을 이해하면 오히려 간단합니다.

+0

거의 정확히 내가 원하는 방식으로 작동합니다. 내가 볼 수있는 작은 "버그"는 당신이 예제에서이 2 개의 파란색 선 위로 마우스를 가져 가면 클릭하지 않으면 강조 표시됩니다. 그들 중 하나를 클릭하면 하나의 highligh가 재설정되고 다음과 같이 기능이 작동합니다. 내 페이지 http://members.upcpoczta.pl/w.racek/mapa.html을 보아라. 나는 당신의 코드로 그것을 새롭게했다. 지도가로드 될 때 알 수 있듯이 마우스 오버 경로를 계속 강조 표시합니다. 한 번에 한 경로 만 강조 표시해야합니다. 나는 당신이 나를 갖기를 바란다. 솔직히 말해서, 나는 그것을 어떻게하는지 모른다. – Voyteck

+0

나는 다음을 본다 : D 놓친 것, 뭔가를 간과 한 것이 틀림 없다. 나는 시간을 갖고 대답을 업데이트하고 플 렁커를 들여다 볼 것이다. – iH8

+0

좋아요! 너의 시간을 가져라. : D 지금까지, 나는 당신의 코드를 연구하고 그것을 이해하려고 노력하고있다. 고마워요 :) – Voyteck