Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 04.04.2013, 13:08
Новичок на форуме
Отправить личное сообщение для Mefistofel Посмотреть профиль Найти все сообщения от Mefistofel
 
Регистрация: 04.04.2013
Сообщений: 2

Помогите анимировать диаграмму в Canvas
Подскажите, пожалуйста, как анимировать данную диаграмму. Нужно, что бы столбики поднимались снизу вверх. Понимаю, что нужно поднимать значение высоты прямоугольника от нуля до "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>
Вложения:
Тип файла: zip diagram.zip (1.3 Кб, 1 просмотров)

Последний раз редактировалось Mefistofel, 04.04.2013 в 14:00.
Ответить с цитированием
  #2 (permalink)  
Старый 04.04.2013, 20:53
Новичок на форуме
Отправить личное сообщение для Mefistofel Посмотреть профиль Найти все сообщения от Mefistofel
 
Регистрация: 04.04.2013
Сообщений: 2

Благодарю, очень выручили.
Все работает идеально.
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск