专注于 JetBrains IDEA 全家桶,永久激活,教程
持续更新 PyCharm,IDEA,WebStorm,PhpStorm,DataGrip,RubyMine,CLion,AppCode 永久激活教程

VueComponents-数字键盘

项目地址 点击查看
项目演示 点击查看

1、 首先监听所有的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";
      });
    });

1、 点击小键盘时阻止默认事件,阻止input失去焦点。

BoardNumberKeyDown(e) {
      if (e && e.preventDefault) {
        e.preventDefault();
      } else {
        window.event.returnValue = false;
        return false;
      }
    },

1、 点击小键盘时,根据事件委托,得出点击的数字,然后根据selectionStartselectionEnd获取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();

1、 点击删除键时,删除光标处数字,最后光标右移。

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();
      }

1、 在删除数字和添加数字后要让input失去焦点在获取焦点,不然光标会在最后而不是在input的可视区域,这样子会看不到输入的值。具体可以查看项目

文章永久链接:https://tech.souyunku.com/43584

未经允许不得转载:搜云库技术团队 » VueComponents-数字键盘

JetBrains 全家桶,激活、破解、教程

提供 JetBrains 全家桶激活码、注册码、破解补丁下载及详细激活教程,支持 IntelliJ IDEA、PyCharm、WebStorm 等工具的永久激活。无论是破解教程,还是最新激活码,均可免费获得,帮助开发者解决常见激活问题,确保轻松破解并快速使用 JetBrains 软件。获取免费的破解补丁和激活码,快速解决激活难题,全面覆盖 2024/2025 版本!

联系我们联系我们