您需要拆分路径以调整三角形的位置。通过挑选第二个“M”在路径中的位置,我能够通过肉眼做到这一点:
var playB = Raphael('playB', 200, 200);
var circle = playB.path("M64,5.864C31.892,5.864,5.864,31.892,5.864,64c0,32.108,26.028,58.136,58.136,58.136c32.108,0,58.136-26.028,58.136-58.136C122.136,31.892,96.108,5.864,64,5.864z");
var triangle = playB.path("M26.736,102.728L97.264,62L26.736,21.272V102.728z");
然后你可以将三角形移过来:
triangle.attr("transform", "T15,0");
要保持属性和动画完整,请将两者都添加到 Raphael 集中:
var playBP = playB.set();
playBP.push(circle, triangle);
playBP.attr({
'stroke-width': 5,
'stroke': "#000",
'fill': "#fff",
'opacity': 1
});
然后你只需要一个小改动:将鼠标悬停命令中的“this”更改为“playBP”。这似乎是多余的,但“this”指的是鼠标悬停的单个元素,而不是集合。
var speed = 5;
playBP.mouseover(function(){
playBP.animate({
'stroke-width': 10,
'stroke': "#fff",
'fill': "#000",
'opacity': .9
}, 1000, 'elastic');
});
playBP.mouseout(function(){
playBP.stop().animate({
'stroke-width': 5,
'stroke': "#000",
'fill': "#fff",
'opacity': 1
}, speed*4, 'elastic');
});
jsFiddle 更新了
如果您只想修复路径,可以使用 Raphael.mapPath() 函数来获取三角形的调整后 x/y,如下所示:
console.log(Raphael.mapPath(triangle.attr("path"), triangle.matrix));