numinput.min.js 7.2 KB

1
  1. layui.define(["jquery"],function(i){var a=layui.$,t="layui-input-number",e="layui-keyboard-number",s=['<style type="text/css">',".",t," + .",e," { position: absolute; display: block; "," background-color: #f2f2f2; border-radius: 2px; border: 1px solid #e6e6e6; outline: none; }",".",e," .layui-key-btn { font-family: Consolas; font-size: 17px; font-weight: 600; "," text-align: center; background-color: #ffffff; cursor: pointer; overflow: hidden; padding: 10px; }",".",e," .layui-key-btn:active { background-color: #f2f2f2; }",".layui-layer-tips kbd { display: inline-block; padding: 3px 5px; font-size: 11px;"," line-height: 10px; color: #24292e; vertical-align: middle; background-color: #fafbfc;"," border: 1px solid #d1d5da; border-radius: 3px; box-shadow: inset 0 -1px 0 #d1d5da; }","</style>"].join("");a("head link:last")[0]&&a("head link:last").after(s)||a("head").append(s);var d={options:{topBtns:123,rightBtns:!0,showTips:!0,listening:!0,defaultPrec:-1,initEnd:a.noop,showEnd:a.noop,hideEnd:a.noop,zIndex:19999999},init:function(i){var e=this;e.options=a.extend(e.options,i),a("."+t).attr({readonly:"readonly"}).on("focus",function(i){e.showKeyboard(e,a(this))}),"function"==typeof e.options.initEnd&&e.options.initEnd()},getTips:function(i){return this.options.showTips?' lay-tips="'+i+'"':""},showKeyboard:function(i,t){"number"===t.prop("type")&&t.attr("type","text");var s=t.next("."+e);if(!s[0]){var d=i.options.rightBtns?"xs3":"xs4",o=i.options.rightBtns?"xs6":"xs4",n=['<div class="layui-col-',d,'">','<div class="layui-card">','<div class="layui-key-btn" data-keycode="49 97">1</div>',"</div>","</div>",'<div class="layui-col-',d,'">','<div class="layui-card">','<div class="layui-key-btn" data-keycode="50 98">2</div>',"</div>","</div>",'<div class="layui-col-',d,'">','<div class="layui-card">','<div class="layui-key-btn" data-keycode="51 99">3</div>',"</div>","</div>"].join(""),l=['<div class="layui-col-',d,'">','<div class="layui-card">','<div class="layui-key-btn" data-keycode="55 103">7</div>',"</div>","</div>",'<div class="layui-col-',d,'">','<div class="layui-card">','<div class="layui-key-btn" data-keycode="56 104">8</div>',"</div>","</div>",'<div class="layui-col-',d,'">','<div class="layui-card">','<div class="layui-key-btn" data-keycode="57 105">9</div>',"</div>","</div>"].join(""),c=['<div class="layui-col-',d,'">','<div class="layui-card">','<div class="layui-key-btn" data-keycode="8">','<i class="layui-icon layui-icon-return"',i.getTips("退格 <kbd>Backspace</kbd>"),"></i>","</div>","</div>","</div>"].join(""),r=['<div class="layui-col-',d,'">','<div class="layui-card">','<div class="layui-key-btn" data-keycode="38 39">','<i class="layui-icon layui-icon-up"',i.getTips("增加 <kbd>↑</kbd>"),"></i>","</div>","</div>","</div>"].join(""),u=['<div class="layui-col-',d,'">','<div class="layui-card">','<div class="layui-key-btn" data-keycode="37 40">','<i class="layui-icon layui-icon-down"',i.getTips("减小 <kbd>↓</kbd>"),"></i>","</div>","</div>","</div>"].join(""),y=['<div class="layui-col-',d,'">','<div class="layui-card">','<div class="layui-key-btn" data-keycode="46">','<i class="layui-icon layui-icon-refresh-1"',i.getTips("清空 <kbd>Delete</kbd>"),"></i>","</div>","</div>","</div>"].join("");t.after(['<div tabindex="0" hidefocus="true" class="',e,' layui-unselect layui-anim layui-anim-upbit" ','style="width:',t.width()+10,'px;">','<div class="layui-row layui-col-space1">',789==i.options.topBtns?l:n,i.options.rightBtns?c:"",'<div class="layui-col-',d,'">','<div class="layui-card">','<div class="layui-key-btn" data-keycode="52 100">4</div>',"</div>","</div>",'<div class="layui-col-',d,'">','<div class="layui-card">','<div class="layui-key-btn" data-keycode="53 101">5</div>',"</div>","</div>",'<div class="layui-col-',d,'">','<div class="layui-card">','<div class="layui-key-btn" data-keycode="54 102">6</div>',"</div>","</div>",i.options.rightBtns?r:"",789==i.options.topBtns?n:l,i.options.rightBtns?u:"",i.options.rightBtns?"":c,'<div class="layui-col-',o,'">','<div class="layui-card">','<div class="layui-key-btn" data-keycode="48 96">0</div>',"</div>","</div>",'<div class="layui-col-',d,'">','<div class="layui-card">','<div class="layui-key-btn" data-keycode="110 190">.</div>',"</div>","</div>",i.options.rightBtns?y:"","</div>","</div>"].join("")),s=t.next("."+e),s.on("touchstart click",".layui-key-btn",function(e){return i.setValue(i,t,a(this)),layui.stope(e),!1}),s.on("blur",function(a){i.setValueRange(i,t,i.toFixedPrec(i,t)),s.remove(),"function"==typeof i.options.hideEnd&&i.options.hideEnd(t)}),i.options.listening&&i.initKeyListening(i,t,s)}i.display(i,t,s)},display:function(i,t,e){var s=t[0].offsetTop+t[0].offsetHeight+4,d=e.height(),o=a(window),n=e.offset().top+e.outerHeight()+4-o.scrollTop();n+d>o.height()&&n>=d&&(s=t[0].offsetTop-d-5),e.css({top:s+"px",left:t[0].offsetLeft+"px","z-index":i.options.zIndex}),e.show(200,function(){"function"==typeof i.options.showEnd&&i.options.showEnd(t,e)}).focus()},initKeyListening:function(i,t,e){var s,d;e.on("keydown",function(o){d=o.keyCode;var n=parseInt(t.val(),10)||0;if(107===d||o.shiftKey&&187===d)n<0&&i.setValueRange(i,t,Math.abs(n));else if(109===d||o.shiftKey&&189===d)n>0&&i.setValueRange(i,t,"-"+n);else if(s=e.find(".layui-key-btn[data-keycode~="+d+"]"),s[0]&&(s.trigger("click").css("background-color","#f2f2f2"),e.off("keyup").on("keyup",function(i){a(".layui-key-btn[data-keycode]").css("background-color","#ffffff")})),d>36&&d<41)return!1;return!0})},toFixedPrec:function(i,t,e,s){var d,o,n,l=a.trim(t.data("prec"));for(l=parseInt(""===l||isNaN(l)?i.options.defaultPrec:l,10),e=void 0===e?t.val():e,e=""==e?t.attr("min")||0:e,n=e.toString().split(".")[1],l<0&&(l=n&&n.length||l),s=s||0,n=s.toString().split(".")[1],l=Math.max(l,n?n.length:0),d=Math.pow(10,l),o=((e*d+s*d).toFixed(0)/d).toString(),n=o.indexOf("."),n<0&&l>0&&(n=o.length,o+=".");o.length<=n+l;)o+="0";return o},setValueRange:function(i,a,t){var e=a.attr("min")||Math.pow(-2,63),s=a.attr("max")||Math.pow(2,63)-1;e="string"==typeof e&&e.indexOf(".")>-1?parseFloat(e):parseInt(e,10),s="string"==typeof s&&s.indexOf(".")>-1?parseFloat(s):parseInt(s,10),t<e&&(t=i.toFixedPrec(i,a,e),i.tips(a,"最小值为 <kbd>"+e+"</kbd>!")),t>s&&(t=i.toFixedPrec(i,a,s),i.tips(a,"最大值为 <kbd>"+s+"</kbd>!")),t=t<e?e:t>s?s:t,a.val(t)},setValue:function(i,t,e){var s,d=a.trim(t.val()),o=a.trim(e.text()),n=a.trim(t.data("prec")),l=d.indexOf(".")>-1;if(n=parseInt(""===n||isNaN(n)?i.options.defaultPrec:n,10),a.inArray(o,["0","1","2","3","4","5","6","7","8","9","."])>-1){if("."===o){if(""===d||l)return;if(0===n)return void i.tips(t,"当前字段不允许输入小数!")}if("0"===o&&0===d.indexOf("0")&&!l)return;if(d.indexOf(".")>-1&&d.split(".")[1].length>=n&&n>0)return void i.tips(t,"精确度为保留小数点后 <kbd>"+n+"</kbd> 位!");s=d=("."!==o&&"0"===d?"":d)+o,t.val(d)}else switch(s=""===d?0:d,step=t.attr("step"),l?(step=parseFloat(step)||.1,s=parseFloat(s)):(step=parseInt(step,10)||1,s=parseInt(s,10)),e.data("keycode")){case"38 39":s=i.toFixedPrec(i,t,s,step);break;case"37 40":s=i.toFixedPrec(i,t,s,-step);break;case 8:var c=d.length;return void(c&&t.val(d.substring(0,c-1)));case 46:return void t.val("")}t.val(s)},tips:function(i,a){return layer.tips(a,i,{tips:[1,"#01AAED"],time:2e3,anim:6,zIndex:this.options.zIndex})}};i("numinput",d)});