Vue Components 数字键盘的实现


Posted in Javascript onSeptember 18, 2019

本文介绍了Vue Components 数字键盘的实现,分享给大家,具体如下:

项目地址 点击查看 

项目演示 点击查看

首先监听所有的input,有input聚焦时调起数字键盘,通过getBoundingClientRect判断input位置让数字键盘在input附近,失去焦点后则隐藏数字键盘

let inputElement = document.getElementsByTagName("input");
  [...inputElement].forEach(ipele => {
   ipele.addEventListener("focus", function(e) {
    $this.inputTarget = e.target;
    let scrollTop =
     window.pageYOffset ||
     document.documentElement.scrollTop ||
     document.body.scrollTop;
    let scrollLeft =
     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;
    return false;
   }
  },

点击小键盘时,根据事件委托,得出点击的数字,然后根据selectionStart,selectionEnd获取input中的焦点,将小键盘中的数字插入焦点处,最后焦点右移一位。

let inputTarget = this.inputTarget;
let Pointstart = inputTarget.selectionStart;
let PointEnd = inputTarget.selectionEnd;
let wordLength = 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的可视区域,这样子会看不到输入的值,具体可以查看项目。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
jquery 表格分页等操作实现代码(pagedown,pageup)
Apr 11 Javascript
基于jQuery的遍历同id元素 并响应事件的代码
Jun 14 Javascript
jquery实现的鼠标下拉滚动置顶效果
Jul 24 Javascript
Js控制滑轮左右滑动实例
Feb 13 Javascript
基于jQuery全屏焦点图左右切换插件responsiveslides
Sep 07 Javascript
基于jquery实现轮播焦点图插件
Mar 31 Javascript
AngularJS控制器详解及示例代码
Aug 16 Javascript
解决同一页面中两个iframe互相调用jquery,js函数的方法
Dec 12 Javascript
详解angularjs popup-table 弹出框表格指令
Sep 20 Javascript
使用webpack搭建react开发环境的方法
May 15 Javascript
javascript实现手动点赞效果
Apr 09 Javascript
vue flex 布局实现div均分自动换行的示例代码
Aug 05 Javascript
layui输入框中只允许输入整数的实现方法
Sep 18 #Javascript
layui富文本编辑器前端无法取值的解决方法
Sep 18 #Javascript
使用layui 的layedit定义自己的toolbar方法
Sep 18 #Javascript
Typescript的三种运行方式(小结)
Sep 18 #Javascript
微信小程序授权登陆及每次检查是否授权实例代码
Sep 18 #Javascript
layui的layedit富文本赋值方法
Sep 18 #Javascript
vue语法自动转typescript(解放双手)
Sep 18 #Javascript
You might like
php Xdebug的安装与使用详解
2013/06/20 PHP
VPS中使用LNMP安装WordPress教程
2014/12/28 PHP
[原创]php获取数组中键值最大数组项的索引值
2015/03/17 PHP
PHP模板引擎Smarty之配置文件在模板变量中的使用方法示例
2016/04/11 PHP
php版本CKEditor 4和CKFinder安装及配置方法图文教程
2019/06/05 PHP
js玩一玩WSH吧
2007/02/23 Javascript
通过location.replace禁止浏览器后退防止重复提交
2014/09/04 Javascript
jquery判断复选框是否被选中的方法
2015/10/16 Javascript
基于PHP和Mysql相结合使用jqGrid读取数据并显示
2015/12/02 Javascript
Summernote实现图片上传功能的简单方法
2016/07/11 Javascript
jQuery实现发送验证码并60秒倒计时功能
2016/11/25 Javascript
用move.js库实现百叶窗特效
2017/02/08 Javascript
bootstrap下拉框动态赋值方法
2018/08/10 Javascript
apicloud拉起小程序并传递参数的方法示例
2018/11/21 Javascript
jQuery实现合并表格单元格中相同行操作示例
2019/01/28 jQuery
Vue 幸运大转盘实现思路详解
2019/05/06 Javascript
浅谈vuex为什么不建议在action中修改state
2020/02/02 Javascript
Vue 一键清空表单的实现方法
2020/02/07 Javascript
vue数据更新UI不刷新显示的解决办法
2020/08/06 Javascript
python读写二进制文件的方法
2015/05/09 Python
Python统计日志中每个IP出现次数的方法
2015/07/06 Python
Python利用BeautifulSoup解析Html的方法示例
2017/07/30 Python
python编程线性回归代码示例
2017/12/07 Python
tensorflow实现softma识别MNIST
2018/03/12 Python
django用户登录和注销的实现方法
2018/07/16 Python
PyTorch的深度学习入门教程之构建神经网络
2019/06/27 Python
Pycharm中Python环境配置常见问题解析
2020/01/16 Python
python中68个内置函数的总结与介绍
2020/02/24 Python
pandas中ix的使用详细讲解
2020/03/09 Python
世界上最大的在线学习和教学市场:Udemy
2017/11/08 全球购物
金智子午JAVA面试题
2015/09/04 面试题
监理资料员岗位职责
2014/01/03 职场文书
创业计划书的主要内容有哪些
2014/01/29 职场文书
仓管岗位职责范本
2014/02/08 职场文书
机械专业求职信
2014/05/25 职场文书
银行纠风工作实施方案
2014/06/08 职场文书