【发布时间】:2014-08-08 00:49:37
【问题描述】:
我有一个 svg 标签,里面有几个图片标签,像这样
<svg>
<image fill-opacity="0.6" style="fill-opacity: 0.6; cursor: move;" xlink:href="http://mysite/arin/site/../pics/category/7/7.png" preserveAspectRatio="none" height="133" width="359.79999999999995" y="779.5" x="2033.5"></image>
</svg>
这是由插件生成的 http://www.graphdracula.net/ 制作 svg 图表。它让我可以拖动周围的节点。
但是我怎样才能在图像周围动态添加black 1px solidborder,并为其添加onclick事件,所以如果我点击它,就会发生一些事情,并且仍然保留拖动功能。
function showGraph(obj) {
var width = $(document).width() * 3;
var height = $(document).height() * 3;
var g = new Graph();
var categories = obj['category_data'];
for(var i=0; i<categories.length; i+=1) {
var cat_data = categories[i];
var id = cat_data['id'];
var name = cat_data['name'];
var images = cat_data['images'];
var render = null;
for(var j=0; j<images.length; j+=1) {
var image = images[j];
if (image['approved']==1 && image['main']==1) {
var info = image['info'];
var link = info['elink'];
var ow = info['width'];
var oh = info['height'];
var w = 150;
var h = (w*oh) / ow;
var w = ow*0.7;
var h = oh*0.7;
render = getRenderer(link, w, h);
break;
}
}
g.addNode(id, { label : name, render : render });
}
for(var i=0; i<categories.length; i+=1) {
var cat_data = categories[i];
var id = cat_data['id'];
var pid = cat_data['parent_id'];
if (pid != 0) {
g.addEdge(pid, id, { directed : true });
}
}
var layouter = new Graph.Layout.Spring(g);
var renderer = new Graph.Renderer.Raphael('canvas', g, width, height);
var images = $("image");
images.css("border", "1px solid black");
images.dblclick(function() {
alert(1);
});
}
function getRenderer(link, w, h) {
return function(r, n) {
var set = r.set().push(r.image(link, 10, 10, w, h));
return set;
};
}
【问题讨论】:
-
发布您用来生成 SVG 输出的代码。
-
我添加了代码,jquery onclick 工作了,但是当我拖动它时它仍然触发,所以我想我可以双击...但是边框的东西不起作用...
-
那是因为它是 SVG 标记,而不是 HTML。 CSS 属性不一定会影响 SVG 元素。
-
那么如何添加边框呢?
-
看起来 SVG 元素是由 RaphaelJS 创建的。您需要先获取图像的 Raphael 元素对象,然后使用
element.attr()函数对其应用属性:raphaeljs.com/reference.html#Element.attr
标签: javascript jquery html css svg