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 相关文章推荐
JavaScript 异步调用框架 (Part 3 - 代码实现)
Aug 04 Javascript
$.format,jquery.format 使用说明
Jul 13 Javascript
javascript截取字符串(通过substring实现并支持中英文混合)
Jun 24 Javascript
node.js中的socket.io入门实例
Apr 26 Javascript
使用jquery animate创建平滑滚动效果(可以是到顶部、到底部或指定地方)
May 27 Javascript
jQuery实现tag便签去重效果的方法
Jan 20 Javascript
JavaScript代码实现图片循环滚动效果
Mar 19 Javascript
JS判断是否在微信浏览器打开的简单实例(推荐)
Aug 24 Javascript
详解webpack进阶之插件篇
Jul 06 Javascript
用vue封装插件并发布到npm的方法步骤
Oct 18 Javascript
原生Vue 实现右键菜单组件功能
Dec 16 Javascript
vue 中使用print.js导出pdf操作
Nov 13 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中截取中文字符串的代码小结
2011/07/17 PHP
php记录日志的实现代码
2011/08/08 PHP
Thinkphp微信公众号支付接口
2016/08/04 PHP
PHP+JavaScript实现无刷新上传图片
2017/02/21 PHP
PHP实现找出有序数组中绝对值最小的数算法分析
2017/08/07 PHP
PHP队列场景以及实现代码实例详解
2021/02/26 PHP
jquery中dom操作和事件的实例学习 仿yahoo邮箱登录框的提示效果
2011/11/30 Javascript
js+jquery常用知识点汇总
2015/03/03 Javascript
详解jQuery中的事件
2016/12/14 Javascript
Javascript基础回顾之(二) js作用域
2017/01/31 Javascript
Angularjs验证用户输入的字符串是否为日期时间
2017/06/01 Javascript
vue组件学习教程
2017/09/09 Javascript
详解如何实现一个简单的 vuex
2018/02/10 Javascript
vue升级之路之vue-router的使用教程
2018/08/14 Javascript
JavaScript中this关键字用法实例分析
2018/08/24 Javascript
使用layui日期控件laydate对开始和结束时间进行联动控制的方法
2019/09/06 Javascript
Element Collapse 折叠面板的使用方法
2020/07/26 Javascript
[02:17]DOTA2亚洲邀请赛 RAVE战队出场宣传片
2015/02/07 DOTA
[48:48]VGJ.T vs Liquid 2018国际邀请赛小组赛BO2 第二场 8.19
2018/08/21 DOTA
在Python中利用Pandas库处理大数据的简单介绍
2015/04/07 Python
详解Python3中yield生成器的用法
2015/08/20 Python
python实现反转部分单向链表
2018/09/27 Python
Python字符串和正则表达式中的反斜杠('\')问题详解
2019/09/03 Python
Django使用list对单个或者多个字段求values值实例
2020/03/31 Python
python 实现分组求和与分组累加求和代码
2020/05/18 Python
详解Python流程控制语句
2020/10/28 Python
Janie and Jack美国官网:GAP旗下的高档童装品牌
2019/09/09 全球购物
澳大利亚在线床零售商:Bedworks
2020/09/01 全球购物
DTD的含义以及作用
2014/01/26 面试题
什么是抽象
2015/12/13 面试题
双十佳事迹材料
2014/01/29 职场文书
合伙协议书
2014/04/23 职场文书
驻村工作先进事迹
2014/08/14 职场文书
2014年党员评议表自我评价
2014/09/27 职场文书
《卧薪尝胆》读后感3篇
2019/12/26 职场文书
Nginx缓存设置案例详解
2021/09/15 Servers