【问题标题】:hammer.js and SVG interactivityhammer.js 和 SVG 交互性
【发布时间】:2014-07-23 14:48:10
【问题描述】:

我在使用hammer.js 和SVG 文件时遇到问题。似乎 svg 对锤子的输入没有反应。这是我在代码示例中缩小的问题:

html-sn-p:

<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-sn-p:

<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”标签将 svg 文件加载到 html 中。然后,我可以“锤击”对象(它记录文本),但颜色不会切换。

问题:我需要同时工作,hammer-multitouch 和 svg-interactivity... 是否有另一种加载文件的方法,以便hammer 可以与之交互并且 SVG 交互性不会丢失? 谢谢你的帮助:)

【问题讨论】:

  • 为什么不将 svg 内联而不是通过标签包含它。
  • 它应该是一个大地铁计划的非常大的 SVG 文件,这会完全弄乱我的 html - 这就是为什么我没有真正考虑它,似乎在这个小例子上工作虽然... :)

标签: javascript html object svg hammer.js


【解决方案1】:

使用 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为“mysvg”的标签声明方式如下:

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

【讨论】:

  • 这看起来很有希望,虽然我没有在你的 js-fiddle 中得到正确的警报;在 Firefox 中,即使我点击鼻子,我也会得到“svg-layer1 tap”。当我在 Chrome 中单击鼻子时,我首先得到“svg-layer1 tap”,然后是“svg-path3889 tap”。点击外面的矩形,什么都没有发生(虽然,正如我所见,什么都不应该)。或者你的意思是蓝色的div?我肯定会得到那个警报。将在我的代码中尝试这个,看看会发生什么。谢谢你的答案:)
  • 好的,所以我将其标记为已接受,因为它有点工作 - 虽然它并不完美。如果我能找到更好的方法,我会在这里发布。无论如何谢谢:)
  • 可以破坏 SVG 文件中的相对 URI,但迄今为止最好的解决方案,+1
猜你喜欢
  • 2016-02-25
  • 2011-12-17
  • 1970-01-01
  • 2017-08-12
  • 2011-07-23
  • 1970-01-01
  • 2018-05-21
  • 2013-08-19
  • 2015-09-05
相关资源
最近更新 更多