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中的public和private对象,即static修饰符
Jan 18 Javascript
早该知道的7个JavaScript技巧
Mar 27 Javascript
js动态添加删除,后台取数据(示例代码)
Nov 25 Javascript
基于javascript的JSON格式页面展示美化方法
Jul 02 Javascript
js简单工厂模式用法实例
Jun 30 Javascript
HTML5 canvas 9绘制图片实例详解
Sep 06 Javascript
Js获取当前日期时间及格式化代码
Sep 17 Javascript
BootStrap实现响应式布局导航栏折叠隐藏效果(在小屏幕、手机屏幕浏览时自动折叠隐藏)
Nov 30 Javascript
jQuery接受后台传递的List的实例详解
Aug 02 jQuery
angularjs实现table增加tr的方法
Feb 27 Javascript
Vue页面跳转动画效果的实现方法
Sep 23 Javascript
深入浅析nuxt.js基于ssh的vue通用框架
May 21 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实现扫描二维码根据浏览器类型访问不同下载地址
2014/10/15 PHP
php使用substr()和strpos()联合查找字符串中某一特定字符的方法
2015/05/12 PHP
PHP性能优化大全(php.ini)
2016/05/20 PHP
基于jquery的lazy loader插件实现图片的延迟加载[简单使用]
2011/05/07 Javascript
瀑布流布局代码一例
2014/04/11 Javascript
Windows下用PyCharm和Visual Studio开始Python编程
2015/10/26 Javascript
JavaScript使用DeviceOne开发实战(一) 配置和起步
2015/12/01 Javascript
js跨浏览器的事件侦听器和事件对象的使用方法
2015/12/17 Javascript
静态页面html中跳转传值的JS处理技巧
2016/06/22 Javascript
jQuery EasyUI API 中文帮助文档和扩展实例
2016/08/01 Javascript
bootstrap fileinput实现文件上传功能
2017/08/23 Javascript
requireJS模块化实现返回顶部功能的方法详解
2017/10/16 Javascript
详解React Native 屏幕适配(炒鸡简单的方法)
2018/06/11 Javascript
python使用PyFetion来发送短信的例子
2014/04/22 Python
python实现可将字符转换成大写的tcp服务器实例
2015/04/29 Python
Python实现周期性抓取网页内容的方法
2015/11/04 Python
linux环境下python中MySQLdb模块的安装方法
2017/06/16 Python
基于Python os模块常用命令介绍
2017/11/03 Python
详谈python中冒号与逗号的区别
2018/04/18 Python
Python之文字转图片方法
2018/05/10 Python
python3实现斐波那契数列(4种方法)
2019/07/15 Python
python序列化与数据持久化实例详解
2019/12/20 Python
pytorch中的transforms模块实例详解
2019/12/31 Python
python 线性回归分析模型检验标准--拟合优度详解
2020/02/24 Python
pycharm激活码免费分享适用最新pycharm2020.2.3永久激活
2020/11/25 Python
埃弗顿足球俱乐部官方网上商店:Everton Direct
2018/01/13 全球购物
韩国11街:11STREET
2018/03/27 全球购物
allbeauty美国:英国在线美容店
2019/03/11 全球购物
WatchShop法国:英国排名第一的独立手表零售商
2020/02/17 全球购物
三个儿子教学反思
2014/02/03 职场文书
航空学院求职信
2014/06/11 职场文书
电子商务求职信
2014/06/15 职场文书
销售经理工作失职检讨书
2014/10/24 职场文书
张家口市高新区党工委群众路线教育实践活动整改方案
2014/10/25 职场文书
2015年社区关工委工作总结
2015/04/03 职场文书
Vue router配置与使用分析讲解
2022/12/24 Vue.js