raphael.js中的z-index分层

时间:2015-06-19 06:45:01

标签: javascript html css raphael z-index

我使用Raphael在不同的层中绘制不同的形状。我想实现CSS z-index分层,这样无论先执行哪个函数(draw_rect,draw_circle或draw_line),矩形都停留在最底层,线条,中间和最顶层的圆圈层。以下是我尝试过的内容:

draw_rect(10, 10, 180, 180); 
draw_circle(100, 100, 60);
draw_line();
function draw_rect(x, y, width, height) {
  var rect = paper.rect(x, y, width, height);
  rect.attr({
    fill: 'red',
    position: 'absolute',
    'z-index': 1
  });
}
function draw_circle(x, y, radius) {
  var circ = paper.circle(x, y, radius);
  circ.attr({
    fill: 'green',
    position: 'absolute',
    'z-index': 3
  });
}
function draw_line() {
  var line = paper.path("M0,0L200,200");
  line.attr({
    'stroke': 'blue',
    position: 'absolute',
    'z-index': 2
  });
}

我不能使用element.tofront()& element.toback()因为表达式只将元素带到顶层/底层(而不是中间层)。所以,如果有人可以启发我做z-index分层,我会感谢永恒:D

1 个答案:

答案 0 :(得分:1)

Afaik你不能用z-index做到这一点,除非你将它们分成单独的svg容器(例如覆盖文件),因为SVG规范使用排序来决定位置。

此外,没有z-index'属性',它是一种样式,因此需要通过CSS设置(即在SVG容器上)。

否则你必须通过DOM排序来做。您可以使用类似el.insertBefore()/ After()之类的东西来帮助将它们放置到正确的位置,但这可能需要您包含一些额外的逻辑。例如,您可以将每个放置在一个集合中并随时检查它们,或者使用selectAll语句来查看是否已绘制了之前的声明,因此您可以在之前/之后添加它们。