Помогите анимировать диаграмму в Canvas
Вложений: 1
Подскажите, пожалуйста, как анимировать данную диаграмму. Нужно, что бы столбики поднимались снизу вверх. Понимаю, что нужно поднимать значение высоты прямоугольника от нуля до "c" с помощью setInterval, но почему-то прокручивает очень быстро и просто выводит готовый результат.
http://learn.javascript.ru/play/fqnVR <!DOCTYPE html> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title>Документ без названия</title> </head> <script type="application/x-javascript" language="javascript"> var userDataD = { 'user': { diagram1: {0: 20.1, 1: 9.1, 2: 13.8, 3: 11.9, 4: 13.2, 5: 7.21}, diagram2: {0: 34.5, 1: 19.2, 2: 26.8, 3: 17.1, 4: 16.2, 5: 16.8} } } var colorsD = ['#9e508b', '#9aa14a']; function drawDiagram() { var canvas = document.getElementById('cdiagram'); if (canvas.getContext) { var ctx = canvas.getContext('2d'); var x0 = y0 = 50; var width = canvas.width-100; var height = canvas.height-80; var stepY = Math.round(height / 40); var stepX = Math.round(width / 6); ctx.font = '9pt Arial, sans-serif'; ctx.fillText("justo, fringilla vel, aliquet nec, vulputate eget, arcu. In enim", width/2+38, 55); ctx.fillText('justo, rhoncut', width/2+280, 70); ctx.rotate( (Math.PI / 180) * 270); ctx.fillText('Percentage (%)', -250, 25); ctx.rotate((Math.PI / 180) * 90); ctx.beginPath(); ctx.strokeStyle = '#000'; ctx.moveTo(x0, y0); ctx.lineTo(x0, height + y0); // Ось У ctx.lineTo(width + x0, height + y0); //Ось Х ctx.moveTo(x0+10, y0-10); ctx.lineTo(x0+10, height + y0-10); ctx.lineTo(width + x0+10, height + y0-10); ctx.lineTo(width +x0+10, y0-10); var m = 0; for (var i = x0; m <= 6; i += stepX) { //значения координат Х m++; ctx.moveTo(i+10, height + y0-10); ctx.lineTo(i, height + y0); ctx.lineTo(i, height + y0 + 4); ctx.font = '12px sans-serif'; ctx.fillText('Period ' + m, i+stepX/2-3, height + y0 + 15); } var n = 50; for (var j = y0; n > 1; j += stepY*10) { //значения координат У n -=10; ctx.moveTo(x0+10, j-10); ctx.lineTo(width + x0+10, j-10); ctx.moveTo(x0+10, j-10); ctx.lineTo(x0, j); ctx.lineTo(x0 - 4, j); ctx.fillText(n, x0-20, j+3); } ctx.stroke(); ctx.closePath(); var lineNumber = -1; ctx.lineWidth = 2; for (var user in userDataD) { for (var type in userDataD[user]) { lineNumber++; ctx.strokeStyle = colorsD[lineNumber]; if (lineNumber > colorsD.length) lineNumber = 0; x0+=35; for (var m in userDataD[user][type]) { var count = userDataD[user][type][m]; var x = x0 + (m * stepX); var y = y0 + (height-count * stepY); var c = count*8; ctx.strokeRect (x-15, height+y0, 30, -c); var gradient = ctx.createLinearGradient(x, height+y0, x, y); gradient.addColorStop(0, colorsD[lineNumber]); gradient.addColorStop(1, '#fff'); ctx.fillStyle = gradient; ctx.fillRect (x-15, height+y0, 30, -c); ctx.fillStyle = 'black'; ctx.fillText (count, x-10, y-20); if (x0 == 85)ctx.fillText ('*', x, y-5); } } } } } </script> </head><body onload="drawDiagram()"> <canvas id="cdiagram" width="724" height="400">No Canvas</canvas> </body> </html> |
Благодарю, очень выручили.
Все работает идеально. |
Часовой пояс GMT +3, время: 09:37. |