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 相关文章推荐
纯CSS打造的导航菜单(附jquery版)
Aug 07 Javascript
jquery lazyload延迟加载技术的实现原理分析
Jan 24 Javascript
jQuery $.data()方法使用注意细节
Dec 31 Javascript
js 一个关于图片onload加载的事
Nov 10 Javascript
jquery根据属性和index来查找属性值并操作
Jul 25 Javascript
Jquery常用的方法汇总
Sep 01 Javascript
JQuery的Pager分页器实现代码
May 03 Javascript
微信小程序分页加载的实例代码
Jul 11 Javascript
React-Router如何进行页面权限管理的方法
Dec 06 Javascript
vue filter 完美时间日期格式的代码
Aug 14 Javascript
Element 默认勾选表格 toggleRowSelection的实现
Sep 04 Javascript
微信小程序之导航滑块视图容器功能的实现代码(简单两步)
Jun 19 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
德生PL550的电路分析
2021/03/02 无线电
php基于mcrypt的加密解密实例
2014/10/27 PHP
PHP结合jQuery插件ajaxFileUpload实现异步上传文件实例
2020/08/17 PHP
php-fpm开启状态统计的方法详解
2017/06/23 PHP
php设计模式之迭代器模式实例分析【星际争霸游戏案例】
2020/04/07 PHP
JavaScript 乱码问题
2009/08/06 Javascript
js 点击按钮弹出另一页,选择值后,返回到当前页
2010/05/26 Javascript
jQuery文本框(input textare)事件绑定方法教程
2013/04/24 Javascript
javascript定义变量时有var和没有var的区别探讨
2014/07/21 Javascript
jQuery制作简洁的多级联动Select下拉框
2014/12/23 Javascript
JS右下角广告窗口代码(可收缩、展开及关闭)
2015/09/04 Javascript
基于Jquery代码实现手风琴菜单
2015/11/19 Javascript
json传值以及ajax接收详解
2016/05/24 Javascript
jQuery获取剪贴板内容的方法
2016/06/16 Javascript
关于动态执行代码(js的Eval)实例详解
2016/08/15 Javascript
JS克隆,属性,数组,对象,函数实例分析
2016/11/26 Javascript
利用Angularjs中模块ui-route管理状态的方法
2016/12/27 Javascript
详解vue后台系统登录态管理
2019/04/02 Javascript
Javascript中的this,bind和that使用实例
2019/12/05 Javascript
element日历calendar组件上月、今天、下月、日历块点击事件及模板源码
2020/07/27 Javascript
Vue实现手机计算器
2020/08/17 Javascript
[04:52]2015国际邀请赛LGD战队晋级之路
2015/08/14 DOTA
python中使用OpenCV进行人脸检测的例子
2014/04/18 Python
Numpy 将二维图像矩阵转换为一维向量的方法
2018/06/05 Python
django 中QuerySet特性功能详解
2019/07/25 Python
Python使用ffmpy将amr格式的音频转化为mp3格式的例子
2019/08/08 Python
如何在windows下安装配置python工具Ulipad
2020/10/27 Python
css3边框_动力节点Java学院整理
2017/07/11 HTML / CSS
澳大利亚先进的皮肤和激光诊所购物网站:Soho Skincare
2018/10/15 全球购物
美国庭院家具购物网站:AlphaMarts
2019/04/10 全球购物
关联、聚合(Aggregation)以及组合(Composition)的区别
2012/02/29 面试题
编写strcpy函数
2014/06/24 面试题
求职信内容考虑哪几点
2013/10/05 职场文书
大学生演讲稿范文
2014/01/11 职场文书
减负增效提质方案
2014/05/23 职场文书
如何写好竞聘报告
2019/04/03 职场文书