将SVG添加到HTML并处理事件
Add SVG to HTML and handle events
我有这个SVG文件。显示不同的svg元素(Circle, Eclipse, Polygon,polyline等)
,每个元素都有自己的ID。
我可以添加函数(onClick或MouseClicK)当特定的ID被点击。
是否有任何方法来添加一个共同的函数(在JavaScript或Jquery)响应点击事件,并告诉我们从哪个对象(ID)点击起源?
所以我需要:
-
HTML代码添加/引用SVG文件。不确定我是否使用SVG或对象标签?哪一个适用于所有浏览器?
-
然后JavaScript的JQuery响应鼠标点击元素并告诉哪个ID被点击了?
如果你看到下面的SVG,它有不同的圆圈,有ID,例如01,02,03等。
http://imgh.us/ClockControl.svg最简单的方法是直接将svg打印到html中。这样,每个SVG元素都是DOM的"真正成员"。
<html>
<head>
…
</head>
<body>
…
<!--
this stands for the content of »ClockControl.svg«
open it in a text editor, copy all the content, beginning at
<svg and paste it into the html
-->
<svg id="your-svg">
…
<path id="e1" d="…" />
…
</svg>
</body>
</html>
下一个是事件处理,可以这样做(on load):
var svg = document.querySelector('svg#your-svg'),
handlers = {
'e1' : function(e){ … }
};
svg.addEventListener('click', function(e) {
var c = e.target;
while (c !== svg) {
if (c.hasAttribute('id') {
var id = c.getAttribute('id');
if (handlers.hasOwnProperty(id)) {
handlers[id](c);
break;
}
}
c = c.parentNode;
}
});
小提琴
如果您不熟悉SVG插入HTML的所有方法,请查看这里。这个答案中使用的方法叫做»inline SVG«。
您可以使用以下代码(只是没有使用jQuery的普通JavaScript),它将在页面中的每个SVG元素上添加一个事件侦听器click
。
document.querySelectorAll('svg').forEach(function(item){
item.addEventListener('click', function(event){alert('svg clicked was: ' + event.target.id)});
})
#circle{
position:absolute;
}
#rect{
position:absolute;
left: 0;
top: 100px;
transform: translate(80px, 80px)
}
Click on one of the following SVG shapes.
<svg height="500" width="500">
<circle id="circle" cx="50" cy="50" r="40" stroke="black" stroke-width="3" fill="red" />
<rect id="rect" width="100" height="100" style="fill:rgb(0,0,255);stroke-width:3;stroke:rgb(0,0,0)">
Sorry, your browser does not support inline SVG.
</svg>
可以使用jQuery获取id
$('svg').click(function(){
alert('element ID is: '+this.id);
})
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.12.4/jquery.min.js"></script>
<svg id="1" width="100" height="100">
<circle cx="50" cy="50" r="40" stroke="green" stroke-width="4" fill="yellow" />
</svg>
<svg id="2" width="100" height="100">
<circle cx="50" cy="50" r="40" stroke="green" stroke-width="4" fill="blue" />
</svg>
相关文章:
- 如何通过bxSlider回调api处理事件
- 在Kinetic.js中通过多层处理事件
- 使用自定义数据属性或将数据绑定到处理程序来处理事件
- 如何启用Emmet'的选项卡键处理程序(HTML快捷方式)
- HTML5拖放;Drop-使用jQuery处理事件
- 如何查找触发或处理事件的 Javascript
- 在 Web 应用中处理事件跟踪的最佳(高性能)方法
- Dojo表单处理事件
- Jquery onmouseover()函数处理动态html图像和span
- CSS Javascript在1 onClick上处理2事件
- 如何在父视图中绑定子视图处理事件的上下文
- 通过更改HTML元素上的动态类名来处理事件列表器
- 如何在三星智能电视中使用按钮处理事件
- 我应该如何使用Javascript处理这个html表单
- 如何获取表单处理事件
- 如何使用 Web 应用处理事件
- JQuery 处理事件,但不执行函数
- 将SVG添加到HTML并处理事件
- jQuery:是否有一种方法可以自动添加属性到动态生成的HTML中,就像live()处理事件一样
- 处理多个滑动事件HTML &Javascript / jQuery