【发布时间】:2016-06-11 05:29:38
【问题描述】:
我编写了一个脚本来绘制多边形并为其设置动画:
http://codepen.io/anon/pen/GZRxRV
实际上我添加了几个多边形(我想添加超过 50 个)。
但我想像这样为我的人物设置动画(缓慢的宽度和高度变换):
http://codepen.io/anon/pen/mVYWJQ
如何实现与我的三角形图形相似的动画?
var svg = document.getElementsByTagName("svg")[0];
var polyElems = [], numSteps = -660, stepNum = 0;
/*var pts = [[451.1,386.7], [93.5,194], [343.4,-7.1]];*/
var pts = [[-5.1,-7.1], [343.4,-7.1], [386.7,194],
[451.1,93.5], [386.7,194], [343.4,-7.1],
[-5.1,-7.1], [262.3,183.5], [386.7,194],
];
// var palette = [['#ff0000'], ['#000']];
var palette = ['#49c9d5','#02abc8','#02abc8','#430017'];
var polyPts = [[0,1,2],[3,2,1],[0,7,2]];
for (var x = 0; x < polyPts.length; x++) {
polyElems[x] = document.createElementNS(svg.namespaceURI, 'polygon');
polyElems[x].setAttribute('fill', [palette[x]]);
// polyElems[x].setAttribute('fill', '#'+Math.floor(Math.random()*16777215).toString(16));
// random hex color routine from http://www.paulirish.com/2009/random-hex-color-code-snippets/
drawPolygon(x);
}
function anim() {
pts = pts.map(function(pt) {
return pt.map(function(coord) {
return coord + 1 * (Math.random() - 0.5); // move each point
});
});
for (var x = 0; x < polyPts.length; x++) {drawPolygon(x);}
stepNum += 5;
/*if (stepNum < numSteps) */requestAnimationFrame(anim); // redo anim'n until all anim'n steps don
}
window.setInterval(anim(), 1);
//anim(); // start the animation
function drawPolygon(x) {
var ptNums = polyPts[x];
var currCoords = [pts[ptNums[0]], pts[ptNums[1]], pts[ptNums[2]]].join();
// creates a string of coordinates; note that [[1,2],[3,4],[5,6]].join() yields "1,2,3,4,5,6"
polyElems[x].setAttribute('points', currCoords);
svg.appendChild(polyElems[x]);
}
【问题讨论】:
标签: javascript jquery animation canvas svg