Атрибут D СВГ анимировать путь
Можно ли использовать SVG для анимации атрибута d
<path>
?
Я могу нарисовать как алмаз, так и круг в виде пути, состоящего из восьми кривых Безье:
<html>
<head>
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.5.2/jquery.min.js"></script>
<script>
jQuery(function($){
var a = 50;
var draw = function(b, c, d, e, f){
return [
'M', a, 0,
'C', b, c, ',', d, e, ',', f, f,
'C', e, d, ',', c, b, ',', 0, a,
'C', -c, b, ',', -e, d, ',', -f, f,
'C', -d, e, ',', -b, c, ',', -a, 0,
'C', -b, -c, ',', -d, -e, ',', -f, -f,
'C', -e, -d, ',', -c, -b, ',', 0, -a,
'C', c, -b, ',', e, -d, ',', f, -f,
'C', d, -e, ',', b, -c, ',', a, 0,
].join(' ');
};
$('#diamond').attr({ d: draw( 5*a/6, a/6, 2*a/3, a/3, a/2 ) });
$('#circle' ).attr({ d: draw( a, a*Math.PI/12, (2 + 1/Math.sqrt(2))*a/3, a*Math.PI/6, a/Math.sqrt(2) ) });
});
</script>
</head>
<body>
<svg width="200" height="200">
<g transform="translate(100,100)">
<path id=diamond fill="blue" stroke="black"/>
</g>
</svg>
<svg width="200" height="200">
<g transform="translate(100,100)">
<path id=circle fill="red" stroke="black"/>
</g>
</body>
</html>
Я хотел бы оживить трансформацию от одного к другому.
Я мог бы смоделировать это в javascript (просто линейно интерполируя параметры кривой Безье в определенные моменты времени), но я хочу знать, есть ли способ сделать это с помощью SVG.
(круг и бриллиант-это только пример - на самом деле я бы например, переход между двумя произвольными твердыми телами, состоящими из одного и того же числа кривых Безье).
1 ответ:
Это возможно. Есть много примеров анимации элемента d пути здесь: http://hoffmann.bplaced.net/svgtest/index.php?in=attributes#pathd включая анимацию кривых Безье. Вы должны быть в состоянии адаптировать один для вашего конкретного случая использования.
Это путь 15 Без анимации флага дуги. Флаг большой дуги может быть только 0 или 1, поэтому его линейная анимация не имеет большого смысла.
<svg xmlns="http://www.w3.org/2000/svg" version="1.1" width="500px" height="500px" viewBox="-500 -500 1000 1000"> <path id="p1" d="M 100 100 A 200 400 30 1 0 600 200 a 300 100 45 0 1 -300 200" stroke="blue" fill="none" stroke-width="4" /> <animate xlink:href="#p1" attributeName="d" attributeType="XML" from="M 100 100 A 200 400 30 1 0 600 200 a 300 100 45 0 1 -300 200" to="M 300 600 A 300 400 -20 1 0 400 200 a 200 600 -50 0 1 100 400" dur="10s" fill="freeze" /> </svg>