(此图片来源于网络,如有侵权,请联系删除! )

前几天有开发过一个html5仿支付宝、微信支付数字键盘,在某些特定场景下自定义数字键盘应用还是蛮广泛的,比如 小程序商城系统 需要零钱支付 ,会员卡支付,心想着微信小程序没有内部数字键盘组件,这样输入密码就需要自己做一个自定义软键盘了。于是就在之前插件的基础上试着开发出了这个小程序wcKeyboard数字键盘插件。

(此图片来源于网络,如有侵权,请联系删除! )

(此图片来源于网络,如有侵权,请联系删除! )

可以自定义输入最大值限制,当输入超过最大值时候,会有警告提示:

(此图片来源于网络,如有侵权,请联系删除! )

还可以自定义键盘背景色 style: ' background: xxx; ',最好设置background颜色较浅为佳:

(此图片来源于网络,如有侵权,请联系删除! )

(此图片来源于网络,如有侵权,请联系删除! )

小程序数字键盘插件内置手机号码验证,当type:'tel'时,输入手机号码为11位会自动检测是否合法:

(此图片来源于网络,如有侵权,请联系删除! )

当配置type:'pwd', 则为密码键盘,可设置密码位数 len: 6

(此图片来源于网络,如有侵权,请联系删除! )

可以随意切换微信键盘、支付宝键盘 skin: wechat/alipay 两种皮肤风格:

(此图片来源于网络,如有侵权,请联系删除! )

(此图片来源于网络,如有侵权,请联系删除! )

init: function () {

console.log('初始化');

var that = this, opt = that.opts;

// 处理传参

__this.setData({

__options: {

isCloseCls: null,

__idx: __idx,

isShowPopup: true,

//中间值

kbVal: '', //设置调试默认值

err: false, //键盘错误信息提示

debug: opt.debug,

id: opt.id,

type: opt.type,

len: opt.len,

complete: opt.complete,

max: opt.max,

style: opt.style,

skin: opt.skin,

ok: opt.ok,

oninput: opt.oninput,

shade: opt.shade,

shadeClose: opt.shadeClose,

opacity: opt.opacity,

anim: opt.anim

}

});

opt.show && opt.show.call(this);

this.__idx = __idx++;

that.callback();

},

callback: function () {

console.log('事件处理');

var that = this, opt = that.opts;

// 清除上一个timer

clearTimeout(util.timer[that.__idx - 1]);

delete util.timer[that.__idx - 1];

/*

* 键盘处理函数事件 ---------------------------------------

*/

// 错误提示

function chkErr(cls, str){

__this.setData({ '__options.err': [cls, str] });

setTimeout(function(){

__this.setData({ '__options.err': false });

}, 2500);

}

// 键盘值检测

function chkVal(text){

if (text.indexOf('.') != -1 && text.substring(text.indexOf('.') + 1, text.length).length == 3) {

return;

}

if (text == '0') {

return;

}

// 输入最大值限制

if (opt.max) {

if (parseInt(text) >= opt.max && text.indexOf('.') == -1) {

chkErr("error", "最大限制值:" + opt.max.toFixed(2));

return;

}

}

// 输入手机号码判断

if (opt.type && opt.type == 'tel') {

var tel = text, _len = parseInt(tel.length), reg = /^0?1[3|4|5|8|7][0-9]\d{8}$/;

if (_len > 11) return;

if (_len == 11) {

if (!reg.test(tel)) {

chkErr("error", "手机号码格式有误!");

} else {

chkErr("success", "验证通过!");

}

typeof opt.complete == "function" && opt.complete.call(this, text);

}

}

// 输入密码长度判断

if (opt.type && opt.type == 'pwd') {

var _len = parseInt(text.length);

if (_len > opt.len) return;

if (_len == opt.len) {

typeof opt.complete == "function" && opt.complete.call(this, text);

}

}

return true;

}

// 键盘值输出

function setVal(text){

__this.setData({ '__options.kbVal': text });

typeof opt.oninput == "function" && opt.oninput.call(this, text);

}

// 处理数字1-9

__this.tapNum = function(e){

var kbval = this.data.__options.kbVal, text = e.currentTarget.dataset.text;

var val = kbval + text;

if (!chkVal(val)) return;

setVal(val);

}

// 处理小数点

__this.tapFloat = function(e){

var kbval = this.data.__options.kbVal, text = e.currentTarget.dataset.text;

if(kbval == '' || kbval.indexOf('.') != -1){

return;

}

var val = kbval + text;

setVal(val);

}

// 处理数字0

__this.tapZero = function(e){

var kbval = this.data.__options.kbVal, text = e.currentTarget.dataset.text;

var val = kbval + text;

if (!chkVal(val)) return;

setVal(val);

}

// 处理删除

__this.tapDel = function(e){

var val = this.data.__options.kbVal.substring(0, this.data.__options.kbVal.length - 1);

setVal(val);

}

// 处理确定按钮事件

__this.tapSure = function(e){

var kbval = this.data.__options.kbVal;

typeof opt.ok == "function" && opt.ok.call(this, kbval);

}

/*

---------------------------------------

*/

// 点击遮罩层关闭

__this.shadeTaped = function (e) {

if (!opt.shadeClose) return;

exportAPI.close(that.__idx);

}

// 点击键盘xclose按钮关闭

__this.xcloseTaped = function(e){

exportAPI.close(that.__idx);

}

// 处理销毁函数

opt.end && (util.end[that.__idx] = opt.end);

}

微信键盘布局view模板:

class="ul">

class="li kb-limit nbor {{err[0]}}">{{err[1]}}

class="li kb-pwd nbor" wx:if="{{type&&type=='pwd'}}"> class="keyboard__panel-pwd"> class="kb-pwdlbl" wx:for="{{len}}" wx:key="index"> type="password" maxlength="1" value="{{kbVal[index]}}" disabled />

class="li kb-result nbor" style="display:{{debug ? 'block' : 'none'}};">{{kbVal}}

class="li kb-xclose nbor" bind:touchstart="xcloseTaped"> src="/utils/component/wcKeyboard/img/icon__kb-xclose.png" mode="aspectFit">

class="li kb-number nbor" data-text="1" bind:tap="tapNum">1

class="li kb-number" data-text="2" bind:tap="tapNum">2

class="li kb-number" data-text="3" bind:tap="tapNum">3

class="li kb-number nbor" data-text="4" bind:tap="tapNum">4

class="li kb-number" data-text="5" bind:tap="tapNum">5

class="li kb-number" data-text="6" bind:tap="tapNum">6

class="li kb-number nbor" data-text="7" bind:tap="tapNum">7

class="li kb-number" data-text="8" bind:tap="tapNum">8

class="li kb-number" data-text="9" bind:tap="tapNum">9

class="li kb-float nbor {{type=='tel' || type=='pwd' ? 'disabled' : ''}}" data-text="." bind:tap="tapFloat">.

class="li kb-zero" data-text="0" bind:tap="tapZero">0

class="li kb-del" bind:tap="tapDel">×

支付宝键盘布局view模板:

class="ul">

class="li kb-limit nbor {{err[0]}}">{{err[1]}}

class="li kb-pwd nbor" wx:if="{{type&&type=='pwd'}}"> class="keyboard__panel-pwd"> class="kb-pwdlbl" wx:for="{{len}}" wx:key="index"> type="password" maxlength="1" value="{{kbVal[index]}}" disabled />

class="li kb-result nbor" style="display:{{debug ? 'block' : 'none'}};">{{kbVal}}

class="kb-flexbox flexbox">

class="kb-one flex1">

class="li kb-number nbor" data-text="1" bind:tap="tapNum">1

class="li kb-number" data-text="2" bind:tap="tapNum">2

class="li kb-number" data-text="3" bind:tap="tapNum">3

class="li kb-number nbor" data-text="4" bind:tap="tapNum">4

class="li kb-number" data-text="5" bind:tap="tapNum">5

class="li kb-number" data-text="6" bind:tap="tapNum">6

class="li kb-number nbor" data-text="7" bind:tap="tapNum">7

class="li kb-number" data-text="8" bind:tap="tapNum">8

class="li kb-number" data-text="9" bind:tap="tapNum">9

class="li kb-float nbor {{type=='tel' || type=='pwd' ? 'disabled' : ''}}" data-text="." bind:tap="tapFloat">.

class="li kb-zero" data-text="0" bind:tap="tapZero">0

class="li kb-xclose" bind:touchstart="xcloseTaped"> src="/utils/component/wcKeyboard/img/icon__kb-xclose2.png" mode="aspectFit">

class="kb-two">

class="li kb-del" bind:tap="tapDel"> src="/utils/component/wcKeyboard/img/icon__kb-del.png" mode="aspectFit">

class="li kb-sure" bind:tap="tapSure">确定

android 支付数字键盘,微信小程序自定义数字键盘|仿支付宝、微信支付数字软键盘...相关推荐

  1. 微信小程序自定义授权弹框

    微信小程序自定义授权弹框 最近微信获取用户信息的接口有调整,就是这货:wx.getUserInfo(OBJECT),文档描述如下: 此接口有调整,使用该接口将不再出现授权弹窗,请使用 <butt ...

  2. uniapp微信小程序自定义相机 ,给相机添加辅助框,解决拒绝相机默认授权后无法再次拉起相机授权问题

    微信小程序自定义相机 效果 文章目录 微信小程序自定义相机 效果 需求 一.小程序自定义相机 1.使用uniapp的camera组件 二.使用cover-view,cover-image加辅助边框 三 ...

  3. 微信小程序-自定义导航栏及返回上一级页面的实现

    一.参考文章 1.微信小程序自定义navigationBar 2.微信小程序返回上一级页面的实现代码 3.小程序开发--常用布局 二.需求 在导航栏中需要显示信息的"未读数量",所 ...

  4. 微信小程序自定义输入仿咸鱼发布

    微信小程序自定义输入仿咸鱼发布 效果图 效果图2 主要代码 .js // pages/user/release/release.js import Toast from 'vant-weapp/toa ...

  5. 微信小程序自定义组件子传父详解(多图)

    微信小程序自定义组件子传父详解 前言: 刚开始为了测试父传子,所以把页面的数组放在了父组件中 1. 然而子组件中绑定的自定义点击事件依然放在子组件的js文件中 2. 所以就会出现我们点击页面的文字能改 ...

  6. 微信小程序自定义类似微信联系人组件

    微信小程序自定义联系人弹窗 在小程序项目中需要有一个选择人员项,想着看着好看一些,所以做成类似微信联系人的界面,由于本人是后端人员,效果不是特别好看,ui使用的是weui 效果图如下: 使用的是小程序 ...

  7. 一步步教你实现微信小程序自定义组件

    一步步教你实现微信小程序自定义组件 更新时间:2022年03月21日 11:12:34   作者:naluduo233 之前做小程序开发的时候,对于开发来说比较头疼的莫过于自定义组件了,下面这篇文章主 ...

  8. 微信小程序自定义组件之Picker组件

    微信小程序开发交流qq群   173683895    承接微信小程序开发.扫码加微信. 需求: 通过JS条件判断,满足条件就弹出Picker给用户选择一个数组里面的数据. 有些朋友可能会有疑问: 1 ...

  9. 微信小程序 自定义导航栏,只保留右上角胶囊按钮

    微信小程序开发交流qq群   173683895    承接微信小程序开发.扫码加微信. navigationStyle 导航栏样式,仅支持以下值: default 默认样式 custom 自定义导航 ...

  10. 微信小程序自定义组件方案

    前言:小程序已于11月初开放了小程序组件功能,但事件方面还不是很完善,有的组件暂时可能还是要用其他方式来实现,这里简单记录下开发小程序自定义组件的要点. 在小程序官方开发组件开发功能之前,自定义组件的 ...

最新文章

  1. 数据结构源码笔记(C语言):冒泡排序
  2. shell去掉字符两端字符_Shell脚本8种字符串截取方法总结
  3. Linux之Apache与Nginx的对比比较:并发性能 消耗机器资源 处理静态资源 模块 稳定性
  4. PopupWindow的一些使用总结
  5. python字符串的表示_Python字符串方法总结
  6. python缓冲区_如何在Python中使用Google的协议缓冲区
  7. 【数据库题型大总结】简答题总结
  8. 6-2 删除单链表偶数节点 (10 分)
  9. python post 远程主机强迫关闭了一个现有的连接_Python最强动态可视化库!
  10. Android学习笔记---16_采用SharedPreferences保存用户偏好设置参数
  11. c#chart背景透明_C#+Layui开发后台管理系统
  12. 剑指offer面试题26-复杂链表的复制
  13. Linux入门: grep与egrep 知识总结
  14. 【优化调度】基于matlab粒子群算法求解经济调度优化问题【含Matlab源码 1489期】
  15. 简单聊聊利用DNS服务器提供单一入口
  16. informatica joiner组件学习
  17. SQL 事务(Tran | Transation)与 Try...Catch 的使用
  18. 计算机网络实验指导gns3,计算机网络实践教程——基于GNS3网络模拟器(CISCO技术)...
  19. 如何使用计算机word,电脑系统教程:电脑Word分栏怎么用
  20. thinkphp构架

热门文章

  1. Echarts横向柱状图:叠加、堆叠(stack)以及点击事件
  2. LISP道路中线_如何画两条样条线间中心线之三:CAD插件/Lisp编程法
  3. 在win8.1上用3proxy搭建socks4/4.5/5代理
  4. 可前进可后退,IDEA 中这个功能神了
  5. 基于Java毕业设计在线图书超市源码+系统+mysql+lw文档+部署软件
  6. [视频]新郎奔赴抗震一线 新娘独自举办婚礼
  7. tp6发送邮件(qq邮箱)
  8. cmake错误集锦:add_subdirectory()
  9. 微软决定于2022年停止对 IE 浏览器的支持
  10. 情商高的人什么表现?