Если я правильно понимаю ваш вопрос, вы хотите, чтобы срез полностью отключался от круговой диаграммы, когда кто-то наводит на него курсор.
Чтобы сделать это, вы хотите перевести сегмент, который позволяет вам перемещатьSVG объект в заданном направлении, в направлении x, y координирует.Я не профессионал SVG, поэтому я бы посоветовал взглянуть на всю функциональность этого самостоятельно;независимо от того, чтобы выполнять эти типы операций с Raphael, вы можете использовать Element.transform
или предоставить значения преобразования в вызове animate
.
Вторым из них является то, что происходит в приведенном вами примере, за исключением того, что используется преобразование масштаба, о чем свидетельствует начальный s
в transform: "s1.1 1.1.
.Масштаб увеличит объект.
Здесь вы хотите использовать перевод, который перемещает объект, но не увеличивает его - он использует t
.
Вотслегка отредактированный блок кода, который будет делать это:
p.mouseover(function () {
var distance = 20;
var xShiftTo = distance*Math.cos(-popangle * rad);
var yShiftTo = distance*Math.sin(-popangle * rad);
p.stop().animate({transform: "t" + xShiftTo + " " + yShiftTo}, ms, "bounce");
txt.stop().animate({opacity: 1}, ms, "bounce");
}).mouseout(function () {
p.stop().animate({transform: ""}, ms, "bounce");
txt.stop().animate({opacity: 0}, ms);
});
В этом примере distance
относится к тому, как далеко должен удаляться срез (поэтому не стесняйтесь настраивать это), xShiftTo
и yShiftTo
вычислить значения x, y, на которые объект должен сместиться, относительно того, где они находятся в данный момент.Обратите внимание, что это немного сложно - вам нужно вычислить значения x, y под заданным углом от центра круговой диаграммы.Позиционирование текста также делает что-то вроде этого, так что я просто взял оттуда необходимую математику.Кроме того, я только что оставил анимацию bounce
, но вы можете изменить ее на linear
или что угодно.Надеюсь, это поможет.