92行JavaScript代码实现的类似Excel外观的UI
- 2020 年 3 月 10 日
- 筆記
源代码:
<html> <body onload = render();> <style type="text/css"> li { list-style: none; } li:before { /*content: "✓ ";*/ content: "A"; } input { border: none; width: 80px; font-size: 14px; padding: 2px; } input:hover { background-color: #eee; } input:focus { background-color: #ccf; } input:not(:focus) { text-align: right; } table { border-collapse: collapse; } td { border: 1px solid #999; padding: 0; } tr:first-child td, td:first-child { background-color: #ccc; padding: 1px 3px; font-weight: bold; text-align: center; } footer { font-size: 80%; } </style> <script> var WIDTH = 10; var HEIGHT = 5; function render(){ for (var i=0; i< HEIGHT; i++) { var row = document.querySelector("table").insertRow(-1); for (var j=0; j < WIDTH; j++) { var letter = String.fromCharCode("A".charCodeAt(0)+j-1); row.insertCell(-1).innerHTML = i&&j ? "<input id='"+ letter+i +"'/>" : i||letter; } } var DATA={}, INPUTS=[].slice.call(document.querySelectorAll("input")); INPUTS.forEach(function(elm) { elm.onfocus = function(e) { e.target.value = localStorage[e.target.id] || ""; }; elm.onblur = function(e) { localStorage[e.target.id] = e.target.value; computeAll(); }; var getter = function() { var value = localStorage[elm.id] || ""; if (value.charAt(0) == "=") { with (DATA) return eval(value.substring(1)); } else { return isNaN(parseFloat(value)) ? value : parseFloat(value); } }; Object.defineProperty(DATA, elm.id, {get:getter}); Object.defineProperty(DATA, elm.id.toLowerCase(), {get:getter}); }); (window.computeAll = function() { INPUTS.forEach(function(elm) { try { elm.value = DATA[elm.id]; } catch(e) {} }); })(); } </script> <table></table> </body> </html>
如图:



要获取更多Jerry的原创文章,请关注公众号"汪子熙"