2014-07-23 3 views
1

hammer.js 및 SVG 파일을 사용하는 데 문제가 있습니다. 그것은 svg가 망치로 입력에 반응하지 않는 것 같습니다. 여기 내 문제는 코드 예제에서 아래로 좁아 :hammer.js 및 SVG 상호 작용

HTML - 조각 :

<div id="mydiv" style="background: blue"> 
    <h1>My div</h1> 
</div> 
<div> 
    <object id="mysvg" data="circle.svg"/> 
</div>  
<script> 
    var element_div = document.getElementById('mydiv'); 
    var element_svg = document.getElementById('mysvg'); 

    Hammer(element_div).on("tap", function(event){ 
     console.log("tap div"); 
    }); 

    Hammer(element_svg).on("tap", function(event){ 
     console.log("svg tap"); 
    }); 
</script> 

SVG-조각 :

<circle id="bubble" fill="black" stroke="#0000ff" cx="50" cy="50" r="50"> 
<set attributeName="fill" to="yellow" begin="click" /> 
</circle> 

SVG 파일을로드 "개체"-tag 사용 HTML로, 나는 SVG의 "onclick"이벤트를 사용하여 색상을 변경할 수 있지만 망치는 원을 보지 않고 "svg tap"을 기록하지 않습니다. 그것은 위의 "tap div"를 완벽하게 기록하기 때문에 망치는 의도 한대로 작동합니다.

대신 "img src"태그를 사용하여 svg 파일을 html로로드 할 수 있습니다. 그런 다음, 나는 (텍스트를 기록하는) 객체에서 "해머"할 수 있지만 색상은 전환되지 않습니다.

문제 : 해머 - 멀티 터치뿐만 아니라 svg-interactivity도 작동해야합니다 ... 해머가 상호 작용할 수 있도록 파일을로드하는 또 다른 방법이 있으며 SVG- 상호 작용이 손실되지 않습니까? Thx :

+0

가 왜 SVG 인라인을 대신 포함하지 않음 그것을 통해 태그. –

+0

그것은 큰 지하철 - 계획의 SVG - 파일로되어있어, 내 html을 완전히 엉망진창으로 만든다. - 내가 정말로 이것을 고려하지 않은 이유는,이 작은 예를 가지고 일하는 것 같다. :) – Zahnstochermann

답변

2

AJAX 로더를 사용하여 그림을로드하고 인라인으로 배치하십시오. 그림이로드되기 전에 이벤트 리스너를 추가하지 마십시오. http://jsfiddle.net/VPc9m/1/

$('#mysvg').load("https://rawgit.com/VengadoraVG/moving-to-gnulinux/master/img/tux.svg", 
function (response, status, xhr) { 
    Hammer(document.getElementById("layer1")).on("tap", function(event){ 
    alert("svg-layer1 tap"); 
    }); 

    Hammer(document.getElementById("path3889")).on("tap", function(event){ 
    alert("svg-path3889 tap"); 
    }); 
}); 

참고 : 여기에

는 jQuery를 사용하여 예입니다 ID가 "mysvg"로 태그 아래의 방법으로 선언 :

<div id="mysvg"> 
</div> 
+0

꽤 유망 해 보입니다. js-biddle에서 올바른 알림을받지는 못합니다. 파이어 폭스에서는 코를 클릭해도 "svg-layer1 tap"을 얻습니다. Chrome에서 코를 클릭하면 먼저 "svg-layer1 tap"과 "svg-path3889 tap"을 얻습니다. 외부 rect를 클릭하면 nothnig가 발생합니다. 아니면 파란색 div를 의미 했습니까? 나는 분명히 그 경고를 받는다. 내 코드에서 이것을 시도하고 어떤 일이 일어날지를 볼 것입니다. 대답은 Thx : – Zahnstochermann

+0

좋아요, 그래서 나는 그것이 허용되는 것으로 표시했습니다. 내가 더 좋은 길을 찾을 수 있다면 여기에 올리겠습니다. 어쨌든 Thx : – Zahnstochermann

+0

SVG 파일에서 상대 URI를 깨뜨릴 수는 있지만 지금까지의 최선의 해결책은 +1 –