用背景图像制作Raphaël.js形状的问题

时间:2014-09-24 07:10:32

标签: javascript raphael

我正在尝试使用Raphaël.jsThis Demo使用背景图像为矩形设置动画。虽然矩形大小已设置为60x60,并且图像大小绝对是60x60,但图像不适合矩形!

对我而言,当我使用animate()函数并且没有所有图像完全适合矩形时,就会发生这种情况。

您能告诉我为什么会这样,以及如何解决这个问题?

var r = Raphael('canvas', 500, 500);
r.canvas.style.backgroundColor = '#ccc';

var st = r.set();
st.push(
 r.rect(100,100,60,60),
 r.rect(180,100,60,60),
 r.rect(100,200,60,60)
);
st.attr({fill:"url(http://cdn2.image-tmart.com/prodimgs/1/13010995/Rose-Bouquet-of-Peach-Heart-Home-Decoration-Simulation-Red-Inside-Pink-Outside_3_60x60.jpg?1363942767)",  "stroke-width": 0});

st.animate({transform: "t200,100"}, 500);

由于

1 个答案:

答案 0 :(得分:1)

在Raphael.js中Element.attr({fill: 'url(...)'})创建一个平铺的<pattern>来填充形状和文本。但是,Raphael.js的目标是兼容SVG和VML(由IE 8支持),所以在我看来它会做出一些妥协,比如自动调整<pattern>的位置。因此,当您翻译<rect>时,<pattern>会被反向翻译,因此它们看起来固定在画布内。

使用Paper.image(src, x, y, w, h)可能会以相同的视觉行为解决您的问题。因为Raphael.js不会隐式更改<image>坐标。像这样:

var r = Raphael('canvas', 500, 500);
r.canvas.style.backgroundColor = '#ccc';

var st = r.set();
st.push(
    r.image(null, 100,100,60,60),
    r.image(null, 180,100,60,60),
    r.image(null, 100,200,60,60)
);

st.attr({src:"http://cdn2.image-tmart.com/prodimgs/1/13010995/Rose-Bouquet-of-Peach-Heart-Home-Decoration-Simulation-Red-Inside-Pink-Outside_3_60x60.jpg?1363942767"});

st.animate({transform: "t200,100"}, 500);

我还推荐Snap.svg,它来自与Raphael.js相同的作者,但仅适用于SVG且副作用较少。