Vue Components 数字键盘的实现
本文介绍了VueComponents数字键盘的实现,分享给大家,具体如下:
项目地址点击查看
项目演示点击查看
首先监听所有的input,有input聚焦时调起数字键盘,通过getBoundingClientRect判断input位置让数字键盘在input附近,失去焦点后则隐藏数字键盘
letinputElement=document.getElementsByTagName("input"); [...inputElement].forEach(ipele=>{ ipele.addEventListener("focus",function(e){ $this.inputTarget=e.target; letscrollTop= window.pageYOffset|| document.documentElement.scrollTop|| document.body.scrollTop; letscrollLeft= window.pageXOffset|| document.documentElement.scrollLeft|| document.body.scrollLeft; $this.NumberkeyBoardStyle= "top:"+ (e.target.getBoundingClientRect().top+ scrollTop+ e.target.offsetHeight)+ "px;left:"+ (e.target.getBoundingClientRect().left+ scrollLeft+ e.target.offsetWidth)+ "px"; }); ipele.addEventListener("blur",function(e){ $this.inputTarget=null; $this.NumberkeyBoardStyle="display:none"; }); });
点击小键盘时阻止默认事件,阻止input失去焦点。
BoardNumberKeyDown(e){ if(e&&e.preventDefault){ e.preventDefault(); }else{ window.event.returnValue=false; returnfalse; } },
点击小键盘时,根据事件委托,得出点击的数字,然后根据selectionStart,selectionEnd获取input中的焦点,将小键盘中的数字插入焦点处,最后焦点右移一位。
letinputTarget=this.inputTarget; letPointstart=inputTarget.selectionStart; letPointEnd=inputTarget.selectionEnd; letwordLength=inputTarget.value.length; if(e.target.className=="numberTD"&&e.target.innerText!="←"){ inputTarget.value= inputTarget.value.slice(0,Pointstart)+ e.target.innerText+ inputTarget.value.slice(PointEnd,wordLength); //一个小数点和开头不能有小数点 inputTarget.value=inputTarget.value.replace(/^\./g,""); inputTarget.value=inputTarget.value .replace(".","$#$") .replace(/\./g,"") .replace("$#$","."); inputTarget.selectionStart=Pointstart+1; inputTarget.selectionEnd=Pointstart+1; //让光标显示在input可视区域 inputTarget.blur(); inputTarget.focus();
点击删除键时,删除光标处数字,最后光标右移。
if(e.target.className=="numberTD"&& e.target.innerText=="←"&& //PointEnd==0时会复制整个input的value PointEnd!=0 ){ inputTarget.value= inputTarget.value.slice(0,Pointstart-1)+ inputTarget.value.slice(PointEnd,wordLength); inputTarget.selectionStart=Pointstart-1; inputTarget.selectionEnd=Pointstart-1; //让光标显示在input可视区域 inputTarget.blur(); inputTarget.focus(); }
在删除数字和添加数字后要让input失去焦点在获取焦点,不然光标会在最后而不是在input的可视区域,这样子会看不到输入的值,具体可以查看项目。
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持毛票票。