使用 js 实现 贷款计算器功能


<html>
<head>
<meta charset="UTF-8">
<title>Insert title heretitle>
head>
<body>
    <table>
        <tr>
            <th>Enter Loan Data:th>
            <td>td>
            <th>Loan Balance, Interest Paymentsth>
        tr>
        <tr>
            <td>Amount of Loan ($):td>
            <td><input id="amount" onchange="calculate()"/>td>
            <td rowspan=8>
                <canvas id='graph' width=400 height=250>canvas>
            td>
        tr>
        <tr>
            <td>
                Annual interest(%):
            td>
            <td><input id='apr' onchange="calculate()"/>td>
        tr>
        <tr>
            <td>
                Repayments period(years):
            td>
            <td><input id='years' onchange="calculate()"/>td>
        tr>
        
        <tr>
            <td>
                Approximate payments:
            td>
            <td><button onclick="calculate()">Calculatebutton>td>
        tr>
        <tr>
            <td>
                Monthly payment:
            td>
            <td>$<span id="payment">span>td>
        tr>
        <tr>
            <td>
                Total payment:
            td>
            <td>$<span id="total">span>td>
        tr>
        <tr>
            <td>
                Total interest:
            td>
            <td>$<span id="totalinterest">span>td>
        tr>
        <tr>
            <td>td>
            <td>td>
        tr>
        <tr>
            <th>
                Sponsors:
            th>
            <td colspan=2>Apply for your loan with one of these fine lenders:
            <div id="lenders">div>
            td>
        tr>
    table>

    <script>
        function calculate(){
            // 贷款金额         
            var amount = document.getElementById('amount');
            // 年利息
            var apr = document.getElementById('apr');
            // 偿还周期
            var years = document.getElementById('years');
            //var zipcode = document.getElementById('zipcode');
            // 每月支付
            var payment = document.getElementById('payment');
            // 总支付
            var total = document.getElementById('total');
            // 总利息
            var totalinterest = document.getElementById('totalinterest');

            // amount 贷款总额
            var principle = parseFloat(amount.value);
            // apr 年利率
            var interest = parseFloat(apr.value) /100 /12;
            // 偿还周期 月份
            var payments = parseFloat(years.value) * 12;
            // pow 求次幂
            var x = Math.pow(1 + interest, payments);
            // monthly 每月还款金额
            var monthly = (principle * x * interest) / (x-1);

            if(isFinite(monthly)){
                payment.innerHTML = monthly.toFixed(2);
                total.innerHTML = (monthly * payments).toFixed(2);
                totalinterest.innerHTML = (monthly * payments - principle).toFixed(2);

                // 保存数据到本地
                // save(amount.value, apr.value, years.value, zipcode.value);
                save(amount.value, apr.value, years.value, '');
                // 借贷人省略

                // 画图
                chart(principle, interest, monthly, payments);
            }else{ 
                payment.innerHTML = "";
                total.innerHTML = "";
                totalinterest.innerHTML = "";
                chart();
            }
        }

        function save(amount, apr, years, zipcode){
            if(window.localStorage){
                localStorage.loan_amount = amount;
                localStorage.loan_apr = apr;
                localStorage.loan_years = years;
                localStorage.loan_zipcode = zipcode;
            }
        }

        window.onload = function(){
            if(window.localStorage && localStorage.loan_amount){
                document.getElementById('amount').value = localStorage.loan_amount;
                document.getElementById('apr').value = localStorage.loan_apr;
                document.getElementById('years').value = localStorage.loan_years;
                //document.getElementById('zipcode').value = localStorage.loan_zipcode;
            }
        }

        function chart(principle, interest, monthly, payments){
            var graph = document.getElementById('graph');
            graph.width = graph.width;

            if(!graph.getContext) return;

            var g = graph.getContext('2d');

            var width = graph.width;
            var height = graph.height;

            // 画总利息
            function paymentToX(n){
                return n * width / payments;
            }
            function amountToY(a){
                return  height - a * height / (monthly * payments * 1.05);
            }
            g.moveTo(paymentToX(0), amountToY(0));
            g.lineTo(paymentToX(payments), amountToY(monthly * payments));
            g.lineTo(paymentToX(payments), amountToY(0));
            g.closePath();
            g.fillStyle = '#f88';
            g.fill();
            g.font = "bold 12px '微软雅黑'";
            //g.fillStyle = "yellow";
            g.fillText("Total interest payments", 20, 20);          

            // 画净值
            var equity = 0;
            g.beginPath();
            g.moveTo(paymentToX(0), amountToY(0));

            for( var p = 1; p<=payments; p++){
                var thisMonthsInterest = (principle - equity) * interest;
                equity += (monthly - thisMonthsInterest);
                g.lineTo(paymentToX(p), amountToY(equity));
            }   

            g.lineTo(paymentToX(payments), amountToY(0));
            g.fillStyle = 'green';
            g.fill();
            g.fillText('Total Equity', 20, 35);

            //画余额
            var bal = principle;
            g.beginPath();
            g.moveTo(paymentToX(0), amountToY(bal));
            for(var p=1; pvar thisMonthsInterest = bal*interest;
                bal-= (monthly - thisMonthsInterest);
                g.lineTo(paymentToX(p), amountToY(bal));
            }
            g.lineWidth = 3;
            g.fillStyle='black';
            g.stroke();
            g.fillText("Loan Balance", 20, 50);

            //将年度数据在X轴做标记
            g.textAlign = 'center';
            var y = amountToY(0);
            for(var year=1; year*12<=payments;year++){
                var x = paymentToX(year*12);
                g.fillRect(x-0.5, y-3, 1, 3);
                if(year ==1){
                    g.fillText("Year",x,y-5);
                }
                if(year % 5==0 && year*12 !== payments){
                    g.fillText(String(year),x,y-5);
                }
            }
            //将赔付数额标记在右边界
            g.textAlign = "right";
            g.textBaseline = "middle";
            var ticks = [monthly*payments, principle];
            var rightEdge = paymentToX(payments);
            for(var i=0;ivar y = amountToY(ticks[i]);
                g.fillRect(rightEdge -3, y-0.5,3,1);
                g.fillText(String(ticks[i].toFixed(0)), rightEdge-5, y);
            }

        }





    script>   
body>
html>

示例图片如下:
使用 js 实现 贷款计算器功能_第1张图片

源码下载地址:js 贷款计算器源码下载地址

你可能感兴趣的:(js)