示例:javascript贷款计算器

  相关技术:

    1、如何在文档中查找元素;

    2、如何通过表单input元素来获取用户的输入数据;

    3、如何通过文档元素来设置HTML内容;

    4、如何将数据存储在浏览器中;

    5、如何使用脚本发起HTTP请求;

    6、如何利用<canvas>元素绘图。

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN""http://www.w3.org/TR/html4/loose.dtd">
<html>
<head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8"><title>Javascript Loan Calculator</title><style type="text/css">.output {font-weight: bold;}#payment {text-decoration: underline;}#graph {border: solid black 1px;}th, td {vertical-align: top;}</style>
</head>
<body>
<table><tr><th>Enter Loan Data:</th><td></td><th>Loan Balance, Cumulative Equity, and Interest Payments</th></tr><tr><td>Amount of the 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>Repayment period (years):</td><td><input id="years" onchange="calculate();"/></td></tr><tr><td>Zipcode (to find lenders):</td><td><input id="zipcode" onchange="calculate();"/></td></tr><tr><th>Approximate Payments:</th><td><button onclick="calculate();">Calculate</button></td></tr><tr><td>Monthly payment:</td><td>$<span class="output" id="payment"></span></td></tr><tr><td>Total payment:</td><td>$<span class="output" id="total"></span></td></tr><tr><td>Total interest (%):</td><td>$<span class="output" id="totalinterest"></span></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 type="text/javascript">"use strict";//如果浏览器支持的话,开启ECMAScript 5的严格模式
    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 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");var principal = parseFloat(amount.value);var interest = parseFloat(apr.value) / 100 / 12;//百分比转为小数,年利率转为月利率var payments = parseFloat(years.value) * 12;//年度赔付转为月度赔付//计算月度赔付数据var x = Math.pow(1 + interest, payments);var monthly = (principal * x * interest) / (x - 1);if (isFinite(monthly)) {payment.innerHTML = monthly.toFixed(2);total.innerHTML = (monthly * payments).toFixed(2);totalinterest.innerHTML = ((monthly * payments) - principal).toFixed(2);//保存用户数据
            save(amount.value, apr.value, years.value, zipcode.value);//展示本地放贷人try {getLenders(amount.value, apr.value, years.value, zipcode.value);} catch (e) {}chart(principal, 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;}}function getLenders(amount, apr, years, zipcode) {//如果浏览器不支持XMLHttpRequest对象,则退出if (!window.XMLHttpRequest) {return;}var ad = document.getElementById("lenders");if (!ad) {return;}var url = "getLenders.php" + "?amt=" + encodeURIComponent(amount) + "&apr=" + encodeURIComponent(apr) +"&yrs=" + encodeURIComponent(years) + "&zip=" + encodeURIComponent(zipcode);var req = new XMLHttpRequest();req.open("GET", url);req.send(null);req.onreadystatechange = function () {if (req.readyState == 4 && req.status == 200) {var response = req.responseText;var lenders = JSON.parse(response);var list = "";for (var i = 0; i < lenders.length; i++) {list += "<li><a href='" + lenders[i].url + "'>" + lenders[i].name + "</a></li>";}ad.innerHTML = "<ul>" + list + "</ul>"}};}function chart(principal, interest, monthly, payments) {var graph = document.getElementById("graph");graph.width = graph.width;//巧妙手法清除并重置画布if (arguments.length == 0 || !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 sans-serif";//定义字体
        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 = (principal - equity) * interest;equity += (monthly - thisMonthsInterest);g.lineTo(paymentToX(p), amountToY(equity));}g.lineTo(paymentToX(payments), amountToY(0));g.closePath();g.fillStyle = "green";g.fill();g.fillText("Total Equity", 20, 35);var bal = principal;g.beginPath();g.moveTo(paymentToX(0), amountToY(bal));for (var p = 1; p <= payments; p++) {var thisMonthsInterest = bal * interest;bal -= (monthly - thisMonthsInterest);g.lineTo(paymentToX(p), amountToY(bal));}g.lineWidth = 3;g.stroke();g.fillStyle = 'black';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, principal];var rightEdge = paymentToX(payments);for (var i = 0; i < ticks.length; i++) {var 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>

贷款计算器

Javascript权威指南——第一章Javascript概述相关推荐

  1. 你是怎么看完《JavaScript权威指南》《JavaScript高级程序设计》等这类厚书的?

    参考博客原址:https://www.cnblogs.com/tonykair/p/7502276.html 你是怎么看完<JavaScript权威指南><JavaScript高级程 ...

  2. netty权威指南第一章

    本章内容如下: 5种网络I/O模型的介绍 I/O多路复用的介绍 1.I/O基础入门 在Java1.4之前,Java对I/O的支持不完善,开发人员在开发高性能I/O的程序时,会面临以下问题: 没有数据缓 ...

  3. JavaScript权威指南 第二章 词法结构

    JavaScript程序是用unicode字符集编写的. JavaScript是区分大小写的语言. HTML是不区分大小写的语言. JavaScript会忽略程序中标识(token)之间的空格. Ja ...

  4. javascript权威指南_重读javascript权威指南(3)

    第三章 数据类型和值 能够表示并操作的值类型成为数据类型,javascript允许使用3中基本数据类型-数字.文本字符串和布尔值,此外还有两种小数据类型null(空)和undefined(未定义),除 ...

  5. Asterisk权威指南/第一章 一场电话革命

    当我们开始着手写一本Asterisk书的时候(大概五年前),我们确信Asterisk将会从根本上改变通讯行业.今天,我们预言的这场革命几乎就要完成了.Asterisk现在是世界上最成功的PBX,并且是 ...

  6. JavaScript权威指南读书笔记——JavaScript的扩展

    常量和局部变量 常量 声明常量需要使用关键字const,const关键爵var关键字行为非常类似,但const声明的是常量. 对常量重新赋值会失败,而对常量重新声明会报错. const pi = 3. ...

  7. CUDA C编程权威指南 第一章

    基础 CUDA(Compute Unified Device Architecture)是NVIDIA提出 CPU和GPU是的PCI-Express总线相连 cpu CPU则负责管理设备端的资源; C ...

  8. 数据仓库工具箱维度建模权威指南-第一章 数据仓库、商业智能及维度建模初步

    数据仓库和商业智能(Data Warehousing and Business Intelligence, DW/BI),DW/BI 系统的数据结构与标识必须符合业务用户的思维过程和词汇 信息两个目的 ...

  9. 《JavaScript 权威指南》犀牛书阅读详解

    前言: <JavaScript 权威指南>(JavaScript:The Definitive Guide)是一本由David Flanagan所著的JavaScript领域的经典书籍,它 ...

最新文章

  1. HDU7059-Counting Stars 线段树 (区间加最低位置,区间减最高位)
  2. vSphere vCenter 4.0 安装图解
  3. cookie的细节——1.一次可不可以发送多个cookie?2. cookie在浏览器中保存多长时间?3. cookie能不能存中文?4. cookie共享问题?
  4. linux网络协议栈之数据包处理过程,Linux网络协议栈之数据包处理过程
  5. SAP Fiori globalization实现原理之Number显示的格式原理
  6. 如何创建_如何创建自己的微信圈子?圈子创建运营指南
  7. JavaScript 打印结果时多出一个undefined/出现undefined
  8. 统计内存使用率shell
  9. openresty—实现缓存前移
  10. android5.1 PowerManagerService和DisplayPowerControler、DisplayPowerState关系
  11. 综合金融服务方案模板
  12. ASP.NET读取Word文档转换为PDF文件的方法
  13. 用计算机画图截图图片,如何快速截图保存图片
  14. 男人至死是少年,我在GitHub找到了我们的童年经典
  15. MATLAB求导相关知识,matlab如何求导相关阅读-matlab如何求导文章阅读-123文学网
  16. 工作范围说明书与需求说明书
  17. Web3:我们创造更好互联网的机会
  18. 安卓加载图片四大框架
  19. 使用FTP(IOS FTP客户端开发教程)
  20. 回顾在江西博微科技工作9个月回顾(吐槽)

热门文章

  1. 关于LayUI单选框渲染checked属性不生效的问题
  2. AI:IPPR的数学表示-CNN可视化语义分析
  3. 华三实现vlan通过
  4. 2018 年度总结 —— 缘见
  5. 【netcore基础】.Net core自动作业之Hangfire
  6. IOS研究之App转让流程须知具体介绍
  7. Oracle归档日志文件(Archive Log file)
  8. 五一重装WinXP操作系统所遇问题的解决
  9. intellij出现Error assembling JAR: invalid entry size
  10. xfce4截图的快捷键设置