hammer.js和SVG交互性

时间:2014-07-23 14:48:10

标签: javascript html object svg hammer.js

我在使用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交互性不会丢失? 谢谢你的帮助:)

1 个答案:

答案 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>