JavaScript. Подробное руководство, 6-е издание
Часть 12 из 535 Информация о книге
<b> // Отобразить полученную HTML-строку в элементе,</b><b> // ссылка на который была получена выше. </b><b> ad.innerHTML = "<ul>" + list + "</ul>";</b><b> }</b><b> }</b><b>}</b><b>// График помесячного изменения остатка по кредиту, а также графики сумм,</b><b>// выплачиваемых в погашение кредита и по процентам в HTML-элементе <canvas>.</b><b>// Если вызывается без аргументов, просто очищает ранее нарисованные графики, </b><b>function chart(principal, interest, monthly, payments) {</b><b> var graph = document.getElementById("graph"); // Ссылка на тег <canvas></b><b> graph.width = graph.width; // Магия очистки элемента canvas</b><b> // Если функция вызвана без аргументов или броузер не поддерживает </b><b> // элемент <canvas>, то просто вернуть управление, </b><b> if (arguments.length == 0 || !graph.getContext) return;</b><b> // Получить объект "контекста" для элемента <canvas>,</b><b> // который определяет набор методов рисования</b><b> var g = graph.getContext("2d"); // Рисование выполняется с помощью этого объекта </b><b> var width = graph.width, height = graph.height; // Получить размер холста</b><b> // Следующие функции преобразуют количество месячных платежей </b><b> // и денежные суммы в пикселы</b><b> function paymentToX(n) { return n * width/payments; }</b><b> function amountToY(a) { return height-(a*height/(monthly*payments*1.05));} </b><b> // Платежи - прямая линия из точки (0,0) в точку (payments,monthly*payments)</b><b> g.moveTo(paymentToX(0), amountToY(0)); // Из нижнего левого угла</b><b> g.lineTo(paymentToX(payments), // В правый верхний</b><b> amountToY(monthly*payments)); </b><b> g.lineTo(paymentToX(payments), amountToY(0)); // В правый нижний </b><b> g.closePath(); // И обратно в начало </b><b> g.fillStyle = "#f88"; // Светло-красный </b><b> g.fill(); // Залить треугольник </b><b> g.font = "bold 12px sans-serif"; // Определить шрифт </b><b> g.fillText("Total Interest Payments", 20,20); // Вывести текст в легенде</b><b> // Кривая накопленной суммы погашения кредита не является линейной </b><b> // и вывод ее реализуется немного сложнее</b><b> var equity = 0;</b><b> g.beginPath(); // Новая фигура</b><b> g.moveTo(paymentToX(0), amountToY(O)); // из левого нижнего угла</b><b> for(var р = 1; р <= payments; р++) {</b><b> // Для каждого платежа выяснить долю выплат по процентам</b><b> var thisMonthsInterest = (principal-equity)*interest;</b><b> equity += (monthly - thisMonthsInterest); // Остаток - погашение кред.</b><b> g.lineTo(paymentToX(p),amountToY(equity)); // Линию до этой точки</b><b> }</b><b> g.lineTo(paymentToX(payments), amountToY(O)); // Линию до оси X</b><b> g.closePath(); // И опять в нач. точку </b><b> g.fillStyle = "green"; // Зеленый цвет </b><b> g.fill(); // Залить обл. под кривой </b><b> g.fillText("Total Equity", 20,35); // Надпись зеленым цветом</b><b> // Повторить цикл, как выше, но нарисовать график остатка по кредиту</b><b> var bal = principal; </b><b> g.beginPath();</b><b> g.moveTo(paymentToX(O),amountToY(bal)); </b><b> for(var p = 1; p <= payments; p++) {</b><b> var thisMonthsInterest = bal*interest;</b><b> bal -= (monthly - thisMonthsInterest) //Остаток от погаш. по кредиту</b><b> g.lineTo(paymentToX(p),amountToY(bal)); // Линию до этой точки</b><b> }</b><b> g.LineWidth = 3; //Жирная линия</b><b> g.stroke; //Нарисовать кривую графика </b><b> g.fillStle="black"; //Черный цвет для текста </b><b> g.fillText("Loan Balabce", 20, 50); //Элемент легенды</b>