Я уверен, что есть гораздо более изящный способ сделать это, но, черт побери, вы можете попробовать что-то вроде этого: http://jsfiddle.net/D6Ps4/2/
В случае, если по какой-то причине это пропало, я включил приведенный ниже код. Решение просто запускает анимацию, а затем проверяет, находится ли курсор мыши (обратите внимание на e.offsetX / e.offsetY) внутри ограничительной рамки вашего объекта Raphael ( Element.getBBox () ) в некоторых установить интервал Если это так, ничего не делайте и используйте setTimeout для повторной проверки через некоторое время, если это не так, приостановите анимацию.
var paper = Raphael("holder");
var animObject = Raphael.animation({cx: 400}, 5000);
circle = paper.circle(90, 90, 45).attr({fill: "#0E4"});
var timer;
circle.mouseover(function(e) {
var anim = function(shouldAnim) {
if (shouldAnim) {
circle.animate(animObject);
}
if (!mouseInsideCircle(e, circle)) {
circle.pause();
return;
} else {
timer = setTimeout(function() {anim(false)}, 20);
}
}
anim(true);
});
circle.mouseout(function() {
this.pause();
clearTimeout(timer);
});
var mouseInsideCircle = function(e, c) {
var bb = c.getBBox();
if (e.offsetX > bb.x && e.offsetY > bb.y) {
return true;
}
return false;
}
Я уверен, что решение некорректно (оно проверяет связанный ящик, а не сам круг; оно также предполагает, что круг движется вправо) и, возможно, не идеально, но кажется, что оно работает достаточно плавно и, надеюсь, дает вам право путь.