1. 基于JavaScript实现的贷款计算器:
  2. <!DOCTYPE html>
  3. <html>
  4. <head>
  5. <title>JavaScript Loan Calculator</title>
  6. <style>
  7. .output{font-weight:bold;}
  8. #payment{text-decoration:underline;}
  9. #graph{border:solid black 1px;}
  10. th,td{vertical-align:center;}
  11. </style>
  12. </head>
  13. <body>
  14. <table>
  15. <tr>
  16. <th>Enter Loan Data:</th>
  17. <td></td>
  18. <th>Loan Balance,Cumulative Equity,and Interest Payments</th>
  19. </tr>
  20. <tr>
  21. <td>Amount of the loan($):</td>
  22. <td><input id='amount' onchange='calculate();'></td>
  23. <td rowspan=8>
  24. <canvas id='graph' width='470' height='250'></canvas>
  25. </td>
  26. </tr>
  27. <tr>
  28. <td>Annual interest(%):</td>
  29. <td><input id='apr' onchange='calculate();'></td>
  30. </tr>
  31. <tr>
  32. <td>Repayment period(years):</td>
  33. <td><input id='years' onchange='calculate();'></td>
  34. </tr>
  35. <tr>
  36. <td>Zipcode(to find lenders):</td>
  37. <td><input id='zipcode' onchange='calculate();'></td>
  38. </tr>
  39. <tr>
  40. <td>Approximate Payments:</td>
  41. <td><button onclick='calculate();'>Calculate</button></td>
  42. </tr>
  43. <tr>
  44. <td>Monthly Payments:</td>
  45. <td>$<span class='output' id='payment'></span></td>
  46. </tr>
  47. <tr>
  48. <td>Total Payments:</td>
  49. <td>$<span class='output' id='total'></span></td>
  50. </tr>
  51. <tr>
  52. <td>Total Interest:</td>
  53. <td>$<span class='output' id='totalinterest'></span></td>
  54. </tr>
  55. <tr>
  56. <th>Sponsors:</th>
  57. <td colspan=2>
  58. Apply for your loan width one of these fine lenders:
  59. <div id='lenders'><div>
  60. </td>
  61. </tr>
  62. </table>
  63. <script type="text/javascript">
  64. "use strict";
  65. function $(id){
  66. return document.getElementById(id);
  67. }
  68. function calculate (){
  69. var amount = $('amount');
  70. var apr = $('apr');
  71. var years = $('years');
  72. var zipcode = $('zipcode');
  73. var payment = $('payment');
  74. var total = $('total');
  75. var totalinterest = $('totalinterest');
  76. var principal = parseFloat(amount.value);
  77. var interest = parseFloat(apr.value)/100/12;
  78. var payments = parseFloat(years.value)*12;
  79. var x = Math.pow(1+interest ,payments);// power method.
  80. var monthly = (principal * x * interest)/(x-1);
  81. if(isFinite(monthly)){
  82. payment.innerHTML = monthly.toFixed(2);
  83. total.innerHTML = (monthly*payments).toFixed(2);
  84. totalinterest.innerHTML = ((monthly*payments)-principal).toFixed(2);
  85. save(amount.value,apr.value,years.value,zipcode.value);
  86. try{
  87. getLenders(amount.value,apr.value,years.value,zipcode.value);
  88. }catch(e){}
  89. chart(principal,interest,monthly,payments);
  90. }else{
  91. payment.innerHTML = "";
  92. total.innerHTML = "";
  93. totalinterest.innerHTML = "";
  94. chart();
  95. }
  96. }
  97. function save(amount,apr,years,zipcode){
  98. if(window.localStorage){
  99. localStorage.loan_amount = amount;
  100. localStorage.loan_apr = apr;
  101. localStorage.loan_years = years;
  102. localStorage.loan_zipcode = zipcode;
  103. }
  104. }
  105. window.onload = function(){
  106. if(window.localStorage&&localStorage.loan_amount){
  107. $('amount').value = localStorage.loan_amount;
  108. $('apr').value = localStorage.loan_apr;
  109. $('years').value = localStorage.loan_years;
  110. $('zipcode').value = localStorage.loan_zipcode;
  111. }
  112. }
  113. function getLenders(amount,apr,years,zipcode){
  114. if(!window.XMLHttpRequest)return ;
  115. var ad = $('lenders');
  116. if(!ad)return;
  117. var url = 'getLenders.php' +
  118. '?amt='+ encodeURIComponent(amount)+
  119. '&apr='+ encodeURIComponent(apr)+
  120. '&yrs='+ encodeURIComponent(years)+
  121. '&zip='+ encodeURIComponent(zipcode);
  122. var req = new XMLHttpRequest();
  123. req.open('GET',url);
  124. req.send(null);
  125. req.onreadystatechange = function(){
  126. if(req.readyState==4 && req.status == 200){
  127. var response = req.responseText;
  128. var lenders = JSON.parse(response);
  129. var list = '';
  130. for(var i=0;i<lenders.length;i++){
  131. list += '<li><a href="' + lenders[i].url +'">'+
  132. lenders[i].name + '</a>';
  133. }
  134. ad.innerHTML = 'ul' + list + 'ul';
  135. }
  136. }
  137. }
  138. function chart(principal,interest,monthly,payments){
  139. var graph = $('graph');
  140. graphgraph.width = graph.width;
  141. if(arguments.length==0|| !graph.getContext)return ;
  142. var g = graph.getContext('2d');
  143. var width = graph.width,
  144. height = graph.height;
  145. function paymentToX(n){
  146. return n*width/payments;
  147. }
  148. function amountToY(a){
  149. return height - (a*height/(monthly*payments*1.05));
  150. }
  151. g.moveTo(paymentToX(0),amountToY(0));
  152. g.lineTo(paymentToX(payments),amountToY(monthly*payments));
  153. g.lineTo(paymentToX(payments),amountToY(0));
  154. g.closePath();
  155. g.fillStyle = '#f88';
  156. g.fill();
  157. g.font="bold 12px sans-serif";
  158. g.fillText("Total Interest Payments",20,20);
  159. var equity = 0;
  160. g.beginPath();
  161. g.moveTo(paymentToX(0),amountToY(0));
  162. for(var  p=1;p<=payments;p++){
  163. var m = (principal - equity)*interest;
  164. equity += (monthly - m);
  165. g.lineTo(paymentToX(p),amountToY(equity));
  166. }
  167. g.lineTo(paymentToX(payments),amountToY(0));
  168. g.closePath();
  169. g.fillStyle = 'green';
  170. g.fill();
  171. g.font="bold 12px sans-serif";
  172. g.fillText("Total Equity",20,35);
  173. var bal = principal;
  174. g.beginPath();
  175. g.moveTo(paymentToX(0),amountToY(bal));
  176. for(var  p=1;p<=payments;p++){
  177. var m = bal*interest;
  178. bal -= (monthly - m);
  179. g.lineTo(paymentToX(p),amountToY(bal));
  180. }
  181. g.lineWidth = 1;
  182. g.stroke();
  183. g.fillStyle = 'black';
  184. g.fillText("Total Balance",20,50);
  185. g.textAlign = 'center';
  186. var y = amountToY(0);
  187. for(var year=1; year*12<=payments;year++){
  188. var x = paymentToX(year*12);
  189. g.fillRect(x-0.5,y-3,1,3);
  190. if(year==1) g.fillText("Year",x,y-5);
  191. if(year % 5 ==0 && year *12 !== payments){
  192. g.fillText(String(year),x,y-5);
  193. }
  194. }
  195. g.textAlign = "right";
  196. g.textBaseline = 'middle';
  197. var ticks = [ monthly * payments ,principal];
  198. var rightEdge = paymentToX(payments);
  199. for(var i=0;i<ticks.length;i++){
  200. var y = amountToY(ticks[i]);
  201. g.fillRect(rightEdge-3,y-0.5,3,1);
  202. g.fillText(String(ticks[i].toFixed(0)),rightEdge-5,y);
  203. }
  204. }
  205. </script>
  206. </body>
  207. </html>
效果图:

一个JavaScript实现的贷款计算器相关推荐

  1. 每天一个JavaScript实例-apply和call的使用方法

    <!DOCTYPE html> <html> <head> <meta http-equiv="Content-Type" content ...

  2. 每天一个JavaScript实例-获取元素当前高度

    <!DOCTYPE html> <html> <head> <meta http-equiv="Content-Type" content ...

  3. 如何在另一个JavaScript文件中包含一个JavaScript文件?

    JavaScript中是否有类似于CSS中@import的内容,可让您在另一个JavaScript文件中包含一个JavaScript文件? #1楼 而不是在运行时添加,而是使用脚本在上传之前进行串联. ...

  4. 优雅的创建一个JavaScript库

    这篇文章的目的是通过演示一个简单的例子来介绍在JS中实例化和定义一个库的正确方法,以优化他人编写或维护自己的JS库. 在我们深入之前,我做了两点假设: 你知道简单的JavaScript或C语言. 你不 ...

  5. 为什么 Web 开发人员需要学习一个 JavaScript 框架?

    原文链接 可能当我们结束本文时,一个新的 Javascript 框架已经在某处启动了.但这确实不在我们的控制范围内.因此,我们应该简单地继续我们所拥有的.至少,由于免责声明,我们可以确定我们不是在发明 ...

  6. 每天一个JavaScript实例-canvas绘图

    <!DOCTYPE html> <html> <head> <meta http-equiv="Content-Type" content ...

  7. 手把手带你写一个JavaScript类型判断小工具

    业务写了很多,依然不是前端大神,我相信这是很多'入坑'前端开发同学的迷茫之处,个人觉得前端职业发展是有路径可寻的,前期写业务是一个积累过程,后期提炼总结,比如编程思想,父子类的原型继承,还是对象之间的 ...

  8. 每天一个JavaScript实例-动态省份选择城市

    <!DOCTYPE html> <html> <head> <meta http-equiv="Content-Type" content ...

  9. 推荐一个JavaScript触发器插件,可通过指定频次、指定时间内触发指定的处理函数...

    推荐一个JavaScript触发器插件js-trigger js-trigger是一个JavaScript触发器插件,可通过指定频次.指定时间内触发指定的处理函数 https://tanwei-cc. ...

最新文章

  1. 【JUC】JDK1.8源码分析之ArrayBlockingQueue(三)
  2. 汇编语言复习摘要二——寄存器
  3. Java RandomAccessFile readUTF()方法及示例
  4. Android应用开发提高篇(6)-----FaceDetector(人脸检测)
  5. PS去除图片和PDF中的水印
  6. Java项目Maven配置操作Pdf
  7. 【数据预处理】sklearn实现数据预处理(归一化、标准化)
  8. Mark一下,以提醒自己
  9. Base64编码的图片在网页中的显示问题的解决
  10. 用c语言解题的程序,C语言实现的数独解题程序
  11. 前端战五渣学前端——初探Parcel急速打包
  12. 阿里云部署SVN服务器
  13. 虚拟机重启网卡命令和防火墙关闭和开启
  14. 常用转义字符例如amp的含义
  15. 网友推荐2010年央视春晚节目单 恶搞社会热点
  16. MySQL-InnoDB引擎-架构和事务原理
  17. 安装centOS 7双系统(四)——解决Broadcom博通BCM 43xx无线网卡驱动问题
  18. UE4开发PSVR游戏的常见问题
  19. 大学生旅游网页制作作业5页 西柏坡介绍网页成品源代码下载 河北红色旅游景点网页设计
  20. 华硕灵耀 X 双屏 Pro 评测

热门文章

  1. python 用tushare每日获得每天股票数据
  2. 如何利用阿里云市场购买并使用短信服务
  3. uniapp 开发微信小程序图像识别
  4. 企业与组织仍然没有实现无纸化的三大原因
  5. HDU 4417 Super Mario(离线线段树or树状数组)
  6. 如何实现跳转至QQ 或者QQ的加好友页面。
  7. 【MySQL】联结表
  8. 什么?内存不够了?进来教你malloc空间
  9. Vulkan Programming Guide::Chapter1::Overview of VulKan(纵观VulKan)
  10. WPS插件的实现和发布