Не присваиваются правильные значения атрибутов.
Вот код:
<html> <head> <script> //--------------------------- ANIMATION ----------------------------// function animate(opts) { var el = opts.el || false; var start = new Date; var delta = opts.delta || linear; var from = opts.from || 0; var to = opts.to || 0; if(el){ clearInterval(opts.el.timer); opts.el.timer = setInterval(function() { var progress = (new Date - start) / opts.duration; if (progress > 1) progress = 1; opts.step( delta(progress),from,to ); if (progress == 1) { clearInterval(opts.el.timer); opts.complete && opts.complete(); } }, opts.delay || 20);} } function back(progress) { var x = 2.9; return Math.pow(progress, 2) * ((x + 1) * progress - x) } function makeEaseOut(delta) { return function(progress) { return 1 - delta(1 - progress) } } //--------------------------- ANIMATION ----------------------------// </script> </head> <body> <div style="height:400px; background:#ccc;"> <svg height="400" width="800" style="background:#fff;"> <circle id="white" cx="400" cy="200" r="1" fill="#66bad6" /> </svg> <script> var div = document.getElementById("white"); var roundM = Math.round(div.getAttribute('r')); setTimeout(function(){ animate({ el : div, duration: 1400, delta: makeEaseOut(back), step: function(delta) { //анимированная смена радиуса div.setAttribute('r',delta*(90-(Math.round(roundM*100)/100))+(Math.round(roundM*100)/100)); } }); }, 100); setTimeout(function(){alert("roundM="+roundM);}, 1500); //вывод изначального значения, вместо текущего </script> </div> </body> </html> проблема такова… я меняю анимацией параметр, круга (радиус). Объект увеличивается…. после чего мне нужно получить его текущее значение и делать другие манипуляции… но почему-то выводится значение изначальное. |
Цитата:
|
В алерт надо засунуть вот это
var roundM = Math.round(div.getAttribute('r')); Кстати, а точно SVG надо анимировать вот таким колхозным способом? По-моему там недостижимые для колхозов индустриальные методы встроены. Я как-то почитал немного и хватило - везде стоит amimate, animate, animate - похоже там нет ничего что не анимате. |
Цитата:
Слева колхоз, справа по-научному: <html> <head> <script> //--------------------------- ANIMATION ----------------------------// function animate(opts) { var el = opts.el || false; var start = new Date; var delta = opts.delta || linear; var from = opts.from || 0; var to = opts.to || 0; if(el){ clearInterval(opts.el.timer); opts.el.timer = setInterval(function() { var progress = (new Date - start) / opts.duration; if (progress > 1) progress = 1; opts.step( delta(progress),from,to ); if (progress == 1) { clearInterval(opts.el.timer); opts.complete && opts.complete(); } }, opts.delay || 20);} } function back(progress) { var x = 2.9; return Math.pow(progress, 2) * ((x + 1) * progress - x) } function makeEaseOut(delta) { return function(progress) { return 1 - delta(1 - progress) } } //--------------------------- ANIMATION ----------------------------// </script> </head> <body> <div style="height:400px; background:#ccc;"> <svg height="400" width="300" style="background:#fff;"> <circle id="white" cx="150" cy="200" r="1" fill="#66bad6" /> </svg> <svg height="400" width="300" style="background:#fff;"> <circle cx="150" cy="200" r="1" fill="#66bad6"> <animate attributeName="r" from="1" to="90" begin="0.1s" dur="1.4s" values="1;110;90" keyTimes="0;0.5;1" keySplines=" 0 0 0.58 1; 0 0 0.58 1" calcMode="spline" fill="freeze" /> </circle> </svg> <script> var div = document.getElementById("white"); var roundM = Math.round(div.getAttribute('r')); setTimeout(function(){ animate({ el : div, duration: 1400, delta: makeEaseOut(back), step: function(delta) { //анимированная смена радиуса div.setAttribute('r',delta*(90-(Math.round(roundM*100)/100))+(Math.round(roundM*100)/100)); } }); }, 100); </script> </div> </body> </html> Запарился подбирать параметры. Я не разбираюсь в этих кубиках безье. И с математикой туго (забыл все, аж страшно смотреть на нее) |
kostyanet, поставил бы плюс, да система не дает. Не нравишься ты ей..
|
Короче, из-за этой портянки кода ниче не видно. Вот:
<!DOCTYPE html> <svg height="400" width="800" style="background:#fff;"> <circle cx="400" cy="200" r="1" fill="#66bad6"> <animate attributeName="r" from="1" to="90" begin="0.1s" dur="1.4s" values="1;110;90" keyTimes="0;0.5;1" keySplines=" 0 0 0.58 1; 0 0 0.58 1" calcMode="spline" fill="freeze" /> </circle> </svg> |
Цитата:
А для единовременной анимации, Вы правы... так лучше. |
Цитата:
|
Цитата:
|
Цитата:
Ну то есть это нужно просто брать редактор, они есть, и рисовать и оживлять в нем. Но как обычно из редакторов выходят как бы кривенькие по оптимизации вещи, придется допиливать, короче гемор. Я тут из Люстры кучерявое лого в SVG сохранил, 46 килобайт, мелочь, но все равно ломанулся половину узлов убил, вроде ровно 22 кб, все равно больше PNG, но зато можно детали логотипа разукрашивать по-отдельности просто меняя циферки в тексте. |
Цитата:
Безиер был человеком Pierre Étienne Bézier |
Цитата:
Я все равно не втыкаю че эти циферки значат. Пока не до них. |
Часовой пояс GMT +3, время: 18:30. |