Vue结合Jquery 实现网页端数字键盘

news/2024/7/11 1:53:50 标签: vue.js, jquery, 前端
  • 效果图
  • js文件
import $ from 'jquery'

/**
 * 调用键盘
 * @param obj input
 * @param round 小数后几位 0不带小数
 */
export function loadNumberKeyboard(obj, round) {
    if ($("#numberkeyboard").length == 0) {
        let numbtnhtml =
            '<div class="numbtn" key="7"><span>7</span></div><div class="numbtn" key="8">8</div><div class="numbtn" key="9">9</div>' +
            '<div class="numbtn" key="4">4</div><div class="numbtn" key="5">5</div><div class="numbtn" key="6">6</div>' +
            '<div class="numbtn" key="1">1</div><div class="numbtn" key="2">2</div><div class="numbtn" key="3">3</div>' +
            '<div class="numbtn" key=".">.</div><div class="numbtn" key="0">0</div><div class="numbtn " key="backspace">退格</div>';

        $("body").append('<div style="position: absolute; left: 0; top: 0; display: none;"><div id="numberkeyboard">' + numbtnhtml + '</div></div>');
        $("#numberkeyboard").find(".numbtn").bind("mousedown", function () {
            $(this).addClass("numbtndown");
        });
        $("#numberkeyboard").find(".numbtn").bind("mouseup", function () {
            $(this).removeClass("numbtndown");
        });
    }

    let containerDiv = $("#numberkeyboard").parent();
    containerDiv.show();
    containerDiv.css("z-index", 9100);
    obj = $(obj);
    if (obj.attr("id")) {
        var objpadding = parseInt(obj.css("padding-top").replace("px", "")) + parseInt(obj.css("padding-bottom").replace("px", ""));
        if (obj.offset().left + 340 >= $(window).width()) {
            containerDiv.css("left", $(window).width() - 340);
        } else {
            containerDiv.css("left", obj.offset().left);
        }
        if (obj.offset().top + 291 + obj.height() + objpadding + 2 + 5 >= $(window).height() + $(window).scrollTop()) {
            containerDiv.css("top", obj.offset().top - 291 - 5);
        } else {
            containerDiv.css("top", obj.offset().top + obj.height() + objpadding + 2 + 5);
        }
    }
    // 点击键盘外隐藏键盘
    $('html,body')
        .click((e) => {
            let target = e.target;
            if (target.localName !== 'input' && target.className !== 'numbtn') {
                containerDiv.hide();
                $('.numberkeyboard').hide();
            }
        })

    $("#numberkeyboard").find(".numbtn").unbind("click");
    $("#numberkeyboard").find(".numbtn").bind("click", function (e) {

        // obj.focus();
        let key = $(this).attr("key");
        switch (key) {
            case "backspace":
                if (obj.val().length > 0) {
                    obj.val(obj.val().substr(0, obj.val().length - 1));
                }
                break;
            case "sign":
                if (obj.val().length > 0) {
                    if (obj.val().substr(0, 1) === "-") {
                        obj.val(obj.val().substr(1, obj.val().length - 1));
                    } else {
                        obj.val("-" + obj.val());
                    }
                }
                break;
            case "close":
                $("#numberkeyboard").find(".numbtn").unbind("click");
                containerDiv.hide();
                break;
            default:
                let newVar = obj.val() + key;
                if (round === 2) {
                    newVar = newVar.match(/^\d{0,5}(?:\.\d{0,2})?/);
                } else if (round === 3) {
                    newVar = newVar.match(/^\d{0,5}(?:\.\d{0,3})?/);
                } else {
                    newVar = newVar.replace(/[^\d]/g, '')
                }

                obj.val(newVar);
                break;
        }
        // 模拟输入
        obj[0].dispatchEvent(new Event('input'));
    });
}
  • css文件
#numberkeyboard {
    background-color: rgb(17, 17, 17);
    height: 295px;
    margin: 0;
    padding: 2px;
    position: relative;
    width: 290px;
    border-radius: 5px;
    display: flex;
    justify-content: center;
    flex-wrap: wrap;
}

#numberkeyboard .numbtn {
    border-radius: 5px;
    height: 68px;
    width: 91px;
    background-color: rgba(91, 91, 91, 0.6);
    color: white;
    margin: 2px;
    line-height: 68px;
    text-align: center;
    font-weight: bold;
    font-size: 25px;
}

#numberkeyboard .numbtn:last-child{
    background-color: red;
    font-size: 20px;
}

#numberkeyboard .numbtn:active {
    background-color: #cccccc;
    color: black;
}
  • 使用方式

    1.首先再main.js中引入上方的css文件
    2.vue代码中直接使用即可
    <input  placeholder="登录账号 / 员工编号"
           id="username" @focus="getKeyboardNum('username')"
           v-model="loginForm.username"/>
    getKeyboardNum(id) {
      loadNumberKeyboard($("#" + id + ""),0)
    },


http://www.niftyadmin.cn/n/5047317.html

相关文章

vite + vue3 + js 搭建组件库 + 核心配置与使用

vite.config.js 这个官网有写 import { defineConfig } from vite import vue from vitejs/plugin-vue import path from "path" // https://vitejs.dev/config/ export default defineConfig({plugins: [vue()],server:{open:true, //自动打开浏览port:8088 //默认…

D数树,牛客小白月赛78,思维

链接&#xff1a;登录—专业IT笔试面试备考平台_牛客网 来源&#xff1a;牛客网 时间限制&#xff1a;C/C 1秒&#xff0c;其他语言2秒 空间限制&#xff1a;C/C 262144K&#xff0c;其他语言524288K 64bit IO Format: %lld 题目描述 “开导&#xff01;” 众所周知&#…

【跟小嘉学 PHP 程序设计】二、PHP 基本语法

系列文章目录 【跟小嘉学 PHP 程序设计】一、PHP 开发环境搭建 【跟小嘉学 PHP 程序设计】二、PHP 基本语法 文章目录 系列文章目录@[TOC](文章目录)前言一、PHP基本语法1.1、hello,world1.2、PHP语法的其他形式1.2.1、简短形式(了解即可)1.2.2、Script 风格1.2.3、ASP 风格1…

VR全景智慧文旅解决方案,助力文旅产业转型升级

引言&#xff1a; 随着科技的不断发展&#xff0c;虚拟现实&#xff08;VR&#xff09;技术正逐渐展露其影响力&#xff0c;改变着旅游业。VR全景智慧文旅解决方案也应运而生&#xff0c;将传统旅游的体验形式从线下扩展到了线上&#xff0c;带来了不一般的文旅体验。 一.VR全…

C++核心编程——P22-练习案例2:点和圆的关系

在一个类中可以让另一个类作为这个类的成员 #include<iostream> using namespace std; class Point//点类 { public:void setx(int x){c_x x;}int getx(){return c_x;}void sety(int y){c_y y;}int gety(){return c_y;}//建议将属性设置为私有&#xff0c;对外提供接口…

精品Python思政素材数据库在线学习资源网

《[含文档PPT源码等]精品基于Python实现的思政素材数据库设计与实现》该项目含有源码、文档、PPT、配套开发软件、软件安装教程、项目发布教程等 软件开发环境及开发工具&#xff1a; 开发语言&#xff1a;python 使用框架&#xff1a;Django 前端技术&#xff1a;JavaScri…

python web编程一:token、session、cookie、密码加解密

1 认证 1 传统的session-cookie机制 HTTP协议是无状态协议&#xff0c;为了解决它产生了cookie和session技术。 浏览器发起第一次请求到服务器&#xff0c;服务器发现浏览器没有提供session id&#xff0c;就认为这是第一次请求&#xff0c;会返回一个新的session id给浏览器…

Java——》线程的打断(停止正在运行的线程)

推荐链接&#xff1a; 总结——》【Java】 总结——》【Mysql】 总结——》【Redis】 总结——》【Kafka】 总结——》【Spring】 总结——》【SpringBoot】 总结——》【MyBatis、MyBatis-Plus】 总结——》【Linux】 总结——》【MongoD…