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 相关文章推荐
ExtJs grid行 右键菜单的两种方法
Jun 19 Javascript
优化innerHTML操作(提高代码执行效率)
Aug 20 Javascript
node.js中的fs.truncateSync方法使用说明
Dec 15 Javascript
js计算文本框输入的字符数
Oct 23 Javascript
jquery.validate提示错误信息位置方法
Jan 22 Javascript
基于javascript实现tab选项卡切换特效调试笔记
Mar 30 Javascript
你真的了解BOM中的history对象吗
Feb 13 Javascript
详述 Sublime Text 打开 GBK 格式中文乱码的解决方法
Oct 26 Javascript
js判断节假日实例代码
Dec 27 Javascript
微信小程序form表单组件示例代码
Jul 15 Javascript
vue 页面回退mounted函数不执行的解决方案
Jul 26 Javascript
Vue如何清空对象
Mar 03 Vue.js
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
JS实现php的伪分页
2008/05/25 PHP
Joomla语言翻译类Jtext用法分析
2016/05/05 PHP
利用PHP自动生成印有用户信息的名片
2016/08/01 PHP
php、mysql查询当天,查询本周,查询本月的数据实例(字段是时间戳)
2017/02/04 PHP
jQuery EasyUI API 中文文档 - Pagination分页
2011/09/29 Javascript
JQUERY对单选框(radio)操作的小例子
2013/04/25 Javascript
js数组操作学习总结
2013/11/04 Javascript
javascript获取flash版本号的方法
2014/11/20 Javascript
Jquery实现鼠标移动放大图片功能实例
2015/03/25 Javascript
JavaScript DOM操作表格及样式
2015/04/13 Javascript
jQuery validate插件submitHandler提交导致死循环解决方法
2016/01/21 Javascript
学JavaScript七大注意事项【必看】
2016/05/04 Javascript
浅谈jquery的map()和each()方法
2016/06/12 Javascript
jQuery实现隔行变色的方法分析(对比原生JS)
2016/11/18 Javascript
windows下vue.js开发环境搭建教程
2017/03/20 Javascript
原生JS实现N级菜单的代码
2017/05/21 Javascript
security.js实现的RSA加密功能示例
2018/06/06 Javascript
微信小程序websocket实现即时聊天功能
2019/05/21 Javascript
Django实现自定义404,500页面教程
2017/03/26 Python
python实现归并排序算法
2018/11/22 Python
pyecharts调整图例与各板块的位置间距实例
2020/05/16 Python
Python基于tkinter canvas实现图片裁剪功能
2020/11/05 Python
SmartBuyGlasses英国:购买太阳镜和眼镜
2018/01/29 全球购物
文明青少年标兵事迹材料
2014/01/28 职场文书
加拿大探亲邀请信
2014/01/28 职场文书
电子信息专业自荐书
2014/02/04 职场文书
《黄河颂》教学反思
2014/02/07 职场文书
总经理岗位职责描述
2014/02/08 职场文书
学生会竞选演讲稿学习部
2014/08/25 职场文书
高考学习决心书
2015/02/04 职场文书
计划生育个人总结
2015/03/02 职场文书
2015年社区流动人口工作总结
2015/05/12 职场文书
利用python Pandas实现批量拆分Excel与合并Excel
2021/05/23 Python
深入理解以DEBUG方式线程的底层运行原理
2021/06/21 Java/Android
SQL之各种join小结详细讲解
2021/08/04 MySQL
SpringCloud Feign请求头删除修改的操作代码
2022/03/20 Java/Android