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 相关文章推荐
js URL参数的拼接方法比较
Feb 15 Javascript
JQuery的AJAX实现文件下载的小例子
May 15 Javascript
最好用的省市二级联动 原生js实现你值得拥有
Sep 22 Javascript
javascript通过navigator.userAgent识别各种浏览器
Oct 25 Javascript
JavaScript访问CSS属性的几种方式介绍
Jul 21 Javascript
用Move.js配合创建CSS3动画的入门指引
Jul 22 Javascript
js获取iframe中的window对象的实现方法
May 20 Javascript
node.js 中国天气预报 简单实现
Jun 06 Javascript
Vue.JS入门教程之列表渲染
Dec 01 Javascript
详解React-Native解决键盘遮挡问题(Keyboard遮挡问题)
Jul 13 Javascript
VueJs 将接口用webpack代理到本地的方法
Nov 27 Javascript
Angular4 反向代理Details实践
May 30 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文件缓存类实现代码
2015/10/26 PHP
PHP微信模板消息操作示例
2017/06/29 PHP
php判断目录存在的简单方法
2019/09/26 PHP
为jQuery.Treeview添加右键菜单的实现代码
2010/10/22 Javascript
js浮点数保留两位小数点示例代码(四舍五入)
2013/12/26 Javascript
原生javascript实现Tab选项卡切换功能
2015/01/12 Javascript
node.js 使用ejs模板引擎时后缀换成.html
2015/04/22 Javascript
JS非Alert实现网页右下角“未读信息”效果弹窗
2015/09/26 Javascript
两款JS脚本判断手机浏览器类型跳转WAP手机网站
2015/10/16 Javascript
超实用的javascript时间处理总结
2016/08/16 Javascript
AngularJS入门教程之REST和定制服务详解
2016/08/19 Javascript
详解Vue单元测试case写法
2018/05/24 Javascript
通过js实现压缩图片上传功能
2020/02/25 Javascript
详解datagrid使用方法(重要)
2020/11/06 Javascript
JavaScript实现打字游戏
2021/02/19 Javascript
[01:05:40]2014 DOTA2国际邀请赛中国区预选赛 5 23 CIS VS DT第三场
2014/05/24 DOTA
python函数局部变量用法实例分析
2015/08/04 Python
Python IDE PyCharm的基本快捷键和配置简介
2015/11/04 Python
python实现mysql的单引号字符串过滤方法
2015/11/14 Python
python实现折半查找和归并排序算法
2017/04/14 Python
解决Linux系统中python matplotlib画图的中文显示问题
2017/06/15 Python
Python中跳台阶、变态跳台阶与矩形覆盖问题的解决方法
2018/05/19 Python
对python中字典keys,values,items的使用详解
2019/02/03 Python
python实现画循环圆
2019/11/23 Python
python seaborn heatmap可视化相关性矩阵实例
2020/06/03 Python
python学习将数据写入文件并保存方法
2020/06/07 Python
python爬虫爬取某网站视频的示例代码
2021/02/20 Python
Java语言程序设计测试题判断题部分
2013/01/06 面试题
公务员个人自我评价分享
2013/11/06 职场文书
学习自我鉴定
2014/02/01 职场文书
产品陈列协议书(标准版)
2014/09/17 职场文书
小学运动会加油词
2015/07/18 职场文书
汽车销售员工作总结
2015/08/12 职场文书
如何让2019年上半年的工作总结更出色!
2019/07/01 职场文书
Java移除无效括号的方法实现
2021/08/07 Java/Android
Win11安装升级时提示“该电脑必须支持安全启动”
2022/04/19 数码科技