我在使用hammer.js和SVG文件时遇到问题。似乎svg对锤子的输入没有反应。这是我在代码示例中缩小的问题:
html-snippet:
<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>
使用“object”-tag将svg文件加载到html中,我可以使用SVG的“onclick”事件来改变颜色,但是锤子不会看到圆圈并且不会记录“svg tap” ”。它完全记录上面的“tap div”,因此锤子按预期工作。
另一种方法是使用“img src”-tag将svg文件加载到html中。然后,我可以“锤击”对象(它记录文本),但颜色不会切换。
问题:我需要两种工作方式,锤子多点触控以及svg交互......是否有另一种加载文件的方式,因此锤子可以与它交互,SVG交互性不会丢失? 谢谢你的帮助:)
答案 0 :(得分:2)
使用AJAX加载程序加载图片并将其内联。切记在加载图片之前不要添加事件监听器。
以下是使用jQuery的示例: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");
});
});
注意:带有id&#34; mysvg&#34;的标签以下面的方式声明:
<div id="mysvg">
</div>