vue功能-数字键盘

使用Vue自定义数字键盘组件(体验度极好) 最近做 Vue 开发,因为有不少页面涉及到金额输入,产品老是觉得用原生的 input 进行金额输入的话 体验很不好,于是自己动手写了一个使用Vue自定义数字键盘组件,具体实现代码大家参考下本 立即下载

vue项目pc端中,有的触摸屏页面需要JS封装键盘,如下就是全部代码~

1.首先是封装的键盘组件

<template>
  <div class="keyboard" v-show="showKeyboard" v-clickoutside="closeModal">
    <p v-for="keys in keyList">
      <template v-for="key in keys  ">
        <i v-if="key === 'top'" @click.stop="clickKey"  class="iconfont icon-zhiding tab-top"></i>
        <i v-else-if="key === '123'" @click.stop="clickKey"  class="tab-num">123</i>
        <i v-else-if="key === 'del'" @click.stop="clickKey"  id="del"  class="iconfont icon-delete key-delete"></i>
        <i v-else-if="key === 'blank'" @click.stop="clickKey"  class="iconfont icon-konggejian-jianpanyong tab-blank"></i>
        <i v-else-if="key === 'symbol'" @click.stop="clickKey"  class="tab-symbol">符</i>
        <i v-else-if="key === 'point'" @click.stop="clickKey"  class="tab-point">·</i>
        <i v-else-if="key === 'enter'" @click.stop="clickKey"  class="iconfont icon-huiche tab-enter"></i>
        <i v-else @click.stop="clickKey" >{{key}}</i>
      </template>
    </p>
    <p v-show="isShow"><i @click="closeKeyBoard">确定</i></p>
  </div>
</template>
<script>
import clickoutside from '../../directives/clickoutside'
export default {
  directives: { clickoutside },
  data() {
    return {
      keyList: [],
      status: 2,//0 小写 1 大写 2 数字 3 符号
      lowercase: [
        ['7', '8', '9'],
        ['4', '5', '6'],
        ['1', '2', '3'],
        ['.','0','del'],
      ],
      //equip:!!navigator.userAgent.toLocaleLowerCase().match(/ipad|mobile/i)//是否是移动设备
    }
  },
  props: {
    option: {
      type: Object
    },
    isShow:{
    	type:Boolean,
    	default :true
    }
  },
  computed: {
    showKeyboard(){
      return this.option.show
    }
  },
  mounted() {
    this.keyList = this.lowercase
  },
  methods: {
    closeKeyBoard(){
    	this.option.show=false;
    	this.$emit('submit');
    },
    tabHandle({ value = '' }) {
      if(value.indexOf('tab-num') > -1){
         this.status = 2
         //数字键盘数据
      }else if(value.indexOf('key-delete') > -1){
        console.log(value.indexOf('key-delete'))
        this.emitValue('delete')
      }else if(value.indexOf('tab-blank') > -1){
        this.emitValue(' ')
      }else if(value.indexOf('tab-enter') > -1){
        this.emitValue('\n')
      }else if(value.indexOf('tab-point') > -1){
        this.emitValue('.')
      }else if(value.indexOf('tab-symbol') > -1){
        this.status = 3
      }else if(value.indexOf('tab-top') > -1){
        if(this.status === 0){
          this.status = 1
        }else{
          this.status = 0
          this.keyList = this.lowercase
        }
      }else{
      }
    },
    clickKey(event) {
      let value = event.srcElement.innerText||'';
      let id = event.srcElement.id;
      let target = event.srcElement ? event.srcElement : event.target;
      if(id !== '' && id === 'del'){//如果点击的是id为del的表示是删除
       this.emitValue(id);
      }else{
        value && id !== 'del'? this.emitValue(value) : this.tabHandle(target.classList);
      }
    },
    emitValue(key) {
      this.$emit('keyVal', key)
    },
    closeModal(e) {
      if (e.target !== this.option.sourceDom) {
        // this.showKeyboard = false
        this.$emit('close', false)
      }
    }
  }
}
</script>
<style scoped lang="less">
.keyboard {
	display: inline-block;
  width: 263px;
  height: 258px;
  font-size: 18px;
  border-radius: 2px;
  background-color: #fff;
  user-select: none;
  bottom: 0;
  position: absolute;/*定位数字键盘*/
  left: 0;
  top: 77px;
  z-index: 999;
  pointer-events: auto;
  p {
    width: 100%;
    margin: 0 auto;
    height: 42px;
    margin-bottom: 0.6em;
    display: flex;
    display: -webkit-box;
    flex-direction: row;
    flex-wrap: nowrap;
    justify-content: center;
    i {
      display: block;
      margin: 2px 1px;
      height: 50px;
      line-height: 52px;
      font-style: normal;
      box-sizing: border-box;
      font-size: 24px;
      border-radius: 3px;
      width: 44px;
      background-color: rgba(228, 52, 55, 0.78);
      text-align: center;
      flex-grow: 1;
      flex-shrink: 1;
      flex-basis: 0;
      -webkit-box-flex: 1;
      color:#fff;
      &:active {
        background-color: #c03030;
      }
    }
    .tab-top {
      width: 50px;
      margin: 0 1%;
      background: #cccdd0;
      color: #fff;
      font-size: 24px;
    }
    .key-delete {
      color: #fff;
    }
    .tab-num {
      font-size: 18px;
      background: #dedede;
      color: #5a5959;
    }
    .tab-point {
      width: 20px;
    }
    .tab-blank {
      width: 50px;
      font-size: 12px;
      padding: 0 15px;
      color: #5a5959;
      line-height: 60px;
    }
    .tab-symbol {
      width: 20px;
      font-size: 18px;
    }
    .tab-enter {
      font-size: 30px;
      line-height: 54px;
    }
    &:nth-child(2) {
      width: 100%;
    }
  }
}
</style>

这个组件中引入了一个js文件如下:

export default {
  bind(el, binding, vnode) {
    function documentHandler(e) {
      if (el.contains(e.target)) {
        return false;
      }
      if (binding.expression) {
        binding.value(e);
      }
    }
    el.__vueClickOutside__ = documentHandler;
    document.addEventListener('click', documentHandler);
  },
  update(el, binding, vnode) {},
  unbind(el, binding) {
    document.removeEventListener('click', el.__vueClickOutside__);
    delete el.__vueClickOutside__;
  }
};

2.接下来就可以在页面中引用数字键盘

			<Keyboard
				class="changeKBstyle"
				:option="option"
 				@close="option.show = false"
				@keyVal="getInputValue"
			></Keyboard>
	import Keyboard from '@/components/keyup/Keyboard';
	components: {
			Keyboard
		},

以下是对输入的数字截取(我是金额类截取最多两位小数)

 // 输入金额
		  getInputValue(val){
			  // moneyInput 购买金额
				  if (val === 'del' ) {
					  this.stepsNum.moneyInput = this.stepsNum.moneyInput.toString().substr(0, this.stepsNum.moneyInput.toString().length - 1);
				  } else {
					  if(this.stepsNum.moneyInput.indexOf(".") >=0){
						  if(val ==".") return ;
						  let start=this.stepsNum.moneyInput.indexOf("."),end=start+2;
						  this.stepsNum.moneyInput=this.stepsNum.moneyInput.slice(0,start)+this.stepsNum.moneyInput.slice(start,end);
					  }
					  this.stepsNum.moneyInput += val
				  }
		  },

以上就是全部代码,冗余代码可自行更改!

vue引入js数字小键盘的实现代码 主要介绍了vue引入js数字小键盘的实现代码,非常不错,具有参考借鉴价值,需要的朋友可以参考下 立即下载

相关推荐

2023东华大学机试OJ进阶版1-81题

先排序。每次找两个最小的数,把其中一个置为两数之和,并累加这个和值,另一个数置为-1,然后再排序,重复操作,直到只剩下一个数。105。

m0_49263811的博客 2796

使用Vue手写一个简易的键盘

简易键盘

遇事不决,可问春风。 823

Ubuntu20.04下Pycharm的快速安装与配置指南

本文提供了一份详细的Ubuntu 20.04系统下PyCharm社区版的安装与配置指南。文章重点介绍了通过手动下载.tar.gz压缩包进行安装的灵活方法,并涵盖了系统准备、依赖安装、首次运行、创建快捷方式以及解释器配置等关键步骤,帮助Python开发者快速搭建高效、可控的本地开发环境。

weixin_28831341的博客 379

vue中实现纯数字键盘

的子数组,从索引0开始,到倒数第一个元素(不含倒数第一个元素)结束。的最后一个字符,并将剩余的部分赋值给。

明思齐的博客 2009

基于E310的纯逻辑代码实现AD9361射频收发

基于微相科技的E310平台实现AD9361的射频收发功能。采用纯逻辑控制的方式,不需要PS参与。实现了用VIO控制收发使能,发射功率,收发频率,数据接口时序控制,接收增益,BIST测试等功能。

xiaomingzi55的博客 2331

WSL2迁移后用户名不见了?一招教你快速恢复Ubuntu22.04默认用户

本文针对WSL2迁移后Ubuntu 22.04默认用户名丢失的常见问题,提供了详细的诊断与修复方案。通过分析迁移底层逻辑,指导用户使用`ubuntu2204.exe config --default-user`命令或配置`/etc/wsl.conf`文件快速恢复用户身份,并涵盖权限修复、冲突解决及自动化迁移脚本等进阶内容,确保子系统迁移后环境完整可用。

web39explorer的博客 558

vue2中使用simple-keyboard虚拟键盘

这里我没有做中文键盘,如果还需要中文键盘,还需要小伙伴自行下载中文键盘的组件,以及更改一些配置。我使用的node版本为16.2.0,使用的simple-keyboard版本为3.7.59。其中onchange事件是当SimpleKeyboard出现更改时触发的事件。在需要使用虚拟键盘的页面引用。

weixin_46164235的博客 2380

Trae 保姆级使用指南,零基础小白也能实现编程。

Trae 使用指南 Trae AI 使用 零基础编程 满血版 DeepSeek-R1&V3 AI IDE 深度理解中文开发场景 傻瓜式编程 编程入门 开发入门

Mr.L-OAM的博客 5816

弹窗拖动改变大小的模态框库

【代码】弹窗拖动改变大小的模态框库。

m0_53912016的博客 4698

华为OD机试真题 新系统2026-04-01 Python&JS 实现【勇攀数字高峰】

请你在给定的数字地形图中寻找登山路径,数字代表当前位置的海拔高度,要求从最低海拔出发,不断攀登,最终到达最高山峰。你需要寻找所有满足条件的登山路径。地图已经保证最低海拔和最高山峰都只有一个。

MISAYAONE的博客 849

华为MetaERP月结加速方案:并行关账技术深度解析

【摘要】华为MetaERP并行关账技术通过创新架构设计,将传统串行月结流程(8-12小时)优化为并行执行(2-4小时)。关键技术包括:1)基于DAG引擎的任务依赖分析,实现模块/子任务三级并行;2)Saga模式分布式事务保障数据一致性;3)动态资源分配算法提升CPU利用率至60-80%。实施效果显示月结时间缩短70%,成功率提升至99.8%,错误恢复时间减少75%。该方案为大型企业ERP系统提供了高效的月结加速方案,未来还将结合AI调度与混合云扩展持续优化。

金牌架构师 1441

vue触屏项目 使用 虚拟键盘组件,通过js给el-input value赋值,v-model绑定值不同步问题(已修改)

vue触屏项目 使用 虚拟键盘组件,通过js给el-input value赋值,v-model绑定值不同步问题(已修改)

蓝胖子的博客 4032

使用自制的NTC测量模块测试Plecs的热仿真效果

可以测试:您完全可以用这个模型来测试热仿真。NTC 模型是连接电气域和热域的关键桥梁。实现闭环:通过这种方式,您创建了一个高度真实的正反馈闭环系统:负载增加 -> 损耗增加 -> 温度升高 -> NTC 阻值变化 -> 控制电路可能因此调整(如降低频率或电流)-> 损耗变化 -> 温度变化。应用场景:这对于设计过温保护 (OTP) 电路风扇控制系统以及分析热失控条件非常有用。单位:确保热域中使用的单位( Kelvin 或 Celsius )与您的 C-Script 模型输入期望的单位一致。

311

css 输密码键盘,关于vue.js:vuevant使用密码输入框和数字键盘

1.开发环境 vue+vant2.电脑系统 windows10专业版3.在应用vue+vant开发的时候,咱们常常会应用到其中的组件明码输入框和数字键盘实现领取等性能,上面我来分享一下明码输入框和数字键盘的应用,以及遇到的问题和解决办法,心愿对你有所帮忙。4.废话不多说,先看效果图:5.在template中增加如下代码::style="{ height: '65%' }">:error-in...

weixin_35719380的博客 793

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

使用vant的密码输入框,数字键盘

&lt;!DOCTYPE html&gt; &lt;html lang="en"&gt; &lt;head&gt; &lt;meta charset="UTF-8"&gt; &lt;meta name="viewport" content="width=device-width, user-scalable=no, initial

uuai 1万+

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

Vue input表单number类型保留两位小数,并防止输入多个小数点解决方法,自定义NumberInput组件

背景:Vue开发移动端应用时,难免用到表单输入,比如金额。 需求:这时就需要吊起移动端数字键盘,input的type就必须设置成number,当然tel类型也可以,但是无法输入小数点。当然如果精力允许,你也可以自定义数字键盘是最好的,网上也有很多Vue数字键盘组件。 踩坑:一但用了input[type=number]类型有很多的坑。 vue在申明表单model的时候必须是整形,要不然一堆红报...

陈万洲的专栏 4万+

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

h5 android数字键盘,vue实现移动端H5数字键盘组件使用详解

本文实例为大家分享了vue实现移动端H5数字键盘组件的使用代码,供大家参考,具体内容如下我们平时扫码付款的时候,经常会输入一些数字进行付款,仔细看了下键盘和系统的键盘有点不一样,于是今天买甘蔗的时候扫码付款就想了一下要怎么去实现一个。话不多说,直接上代码。结果如下:代码如下:123×456789确定0.export default {name: 'App',data () {return {act...

weixin_29331985的博客 641

【数字键盘的keyCode码 附上键盘】

一目了然了。

m0_57426442的博客 232

基于vant的密码输入框,数字键盘,及金额输入

【代码】基于vant的密码输入框,数字键盘,及金额输入。

coldriversnow的专栏 2614

VUE_vant密码弹窗

<van-popup v-model="passshow"> <div class="popup"> <div class="popup_title"> <div class="popup_title_">请输入支付密码</div> </div> <!-- 密码输入框 --> <van-password-input .

小歪博客 1305

uniapp踩坑之项目:uniapp数字键盘组件—APP端

uniapp数字键盘组件—APP端/在components文件夹创建digitKeyboard文件夹,再创建digitKeyboard.vue。// 数字键盘组件 在项目里main.js中配置如下代码。//main.js全局引入。

意初的博客 1211

vue 自定义键盘组件_我劝你别在数字键盘上刁难我——Vue自定义数字键盘组件...

Vue自定义数字键盘前言最近做 Vue 开发,因为有不少页面涉及到金额输入,产品老是觉得用原生的 input 进行金额输入的话 体验很不好,天天催着我找时间优化,原生控件还有优化个毛线,回去等死吧~绝望既然要用户体验,而我又对原生控件感到很绝望,于是!我有一个大胆的想法....我们自己动手写一个!废话不多说,先上效果图吧~效果图效果图具体实现布局排版请输入金额{{ money }}789C456清...

weixin_39552304的博客 572

vue 匹配键盘输入_使用Vue自定义数字键盘组件(体验度极好)

为了满足用户体验,小编用vue写了一个自定义数字键盘组件,用户体验度还不错。废话不多说,先上效果图吧~效果图具体实现布局排版请输入金额{{ money }}789C456清空123.0确认布局方面我全部采用了 div 元素来模拟,方便好用 (๑ŐдŐ)b键盘按键方面,每个按钮都设置了其自定义属性值 num ,目的就是为了区分按键后产生不同的效果事件绑定在了父级,通过捕获来确定具体点击的元素样式代码...

weixin_39689700的博客 777

js模拟键盘_超丝滑 Vue 虚拟键盘组件Vue-SimpleKeyboard

今天给小伙伴们推荐一款超酷的 Vue 模拟键盘组件VueSimpleKeyboard。vue-simple-keyboard 一个可定制 自适应 轻量级的虚拟键盘vue.js组件。支持自定义主题,手机端和IOS风格、数字键盘等功能。特性支持vue不需要额外的插件可定制性选项和方法自适应布局支持自动更正,输入掩码等功能支持多键盘实例提供丰富的演示demos安装$ npm i simple-keybo...

weixin_39705794的博客 2288

vue 自定义键盘组件_使用Vue自定义数字键盘组件的方法

这篇文章主要介绍了关于使用Vue自定义数字键盘组件的方法,有着一定的参考价值,现在分享给大家,有需要的朋友可以参考一下最近做 Vue 开发,因为有不少页面涉及到金额输入,产品老是觉得用原生的 input 进行金额输入的话 体验很不好,于是自己动手写了一个使用Vue自定义数字键盘组件,具体实现代码大家参考下本文为了满足用户体验,小编用vue写了一个自定义数字键盘组件,用户体验度还不错。废话不多说,先...

weixin_33438009的博客 1288

vue实现自定义身份证,数字键盘(光标,输入框,键盘)

vue实现自封装身份证键盘(光标,输入框,键盘)组件介绍组件代码插入链接与图片组件使用引用使用参数介绍方法插槽 组件介绍 vue实现自封装身份证键盘(光标,输入框,键盘全手写) 组件代码 <template> <div class="myKeyboard" @click="handleFocus" @blur="handleBlur" tabindex="0"> <div class="input-container"> <!-- <d

阿铭的博客 4317
上一篇: 如何在vue项目中引入swiper
下一篇: vue功能-键盘
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值