微信小程序自定义键盘 内部虚拟支付


Posted in Javascript onDecember 20, 2018

本文实例为大家分享了微信小程序自定义键盘的具体代码,供大家参考,具体内容如下

先看效果图 :

微信小程序自定义键盘 内部虚拟支付

微信支付的话,调用微信支付接口是有自己的小键盘的,因为小程序没有内部键盘,所以有时候商城内部需要零钱支付 ,会员卡支付,输入密码就需要自己做一个小键盘了。

 css  跟  html不做过多说明 直接照搬就行   页面上面的3个小图片就不提供了 js 部分做了详细注释

<view class="popup-memu">
 <view class="line" style="background-color: rgb(255, 255, 255)"></view>
 <view class="payMode" bindtap="pay" data-pay_type='weipay'>
  <image src="/images/wechat.png"></image>
  <text style="width:70%">微信</text>
  <image src="/images/arrows-right.png"></image>
 </view>
 <view class="payMode" bindtap="pay" data-pay_type='1'>
  <image src="/images/vip.png"></image>
  <text style="width:70%">会员卡</text>
  <image src="/images/arrows-right.png"></image>
 </view>
 <view class="payMode" bindtap="pay" data-pay_type='2'>
  <image src="/images/payPacket.png"></image>
  <text style="width:70%">零钱</text>
  <image src="/images/arrows-right.png"></image>
 </view>
</view>
 <!-- 密码框带键盘 -->
<action-sheet hidden="{{passwordInputHidden}}" bindchange="passwordInputHidden">
 <view class='password-input'>
  <view>
   <text style="display:{{inputPassword[0]?'':'none'}}"></text>
  </view>
  <view>
   <text style="display:{{inputPassword[1]?'':'none'}}"></text>
  </view>
  <view>
   <text style="display:{{inputPassword[2]?'':'none'}}"></text>
  </view>
  <view>
   <text style="display:{{inputPassword[3]?'':'none'}}"></text>
  </view>
  <view>
   <text style="display:{{inputPassword[4]?'':'none'}}"></text>
  </view>
  <view>
   <text style="display:{{inputPassword[5]?'':'none'}}"></text>
  </view>
 </view>
 <view class='tips'>请输入支付密码(
  <text>-¥100</text>)</view>
 <view class='keyboard'>
  <view class='left number'>
   <view data-key="1" hover-class='active' hover-stay-time='100' bindtap='inputPassword'>1</view>
   <view data-key="2" hover-class='active' hover-stay-time='100' bindtap='inputPassword'>2</view>
   <view data-key="3" hover-class='active' hover-stay-time='100' bindtap='inputPassword'>3</view>
   <view data-key="4" hover-class='active' hover-stay-time='100' bindtap='inputPassword'>4</view>
   <view data-key="5" hover-class='active' hover-stay-time='100' bindtap='inputPassword'>5</view>
   <view data-key="6" hover-class='active' hover-stay-time='100' bindtap='inputPassword'>6</view>
   <view data-key="7" hover-class='active' hover-stay-time='100' bindtap='inputPassword'>7</view>
   <view data-key="8" hover-class='active' hover-stay-time='100' bindtap='inputPassword'>8</view>
   <view data-key="9" hover-class='active' hover-stay-time='100' bindtap='inputPassword'>9</view>
   <view data-key="X" hover-class='active' hover-stay-time='100' bindtap='inputPassword'>X</view>
   <view data-key="0" hover-class='active' hover-stay-time='100' bindtap='inputPassword'>0</view>
   <view data-key="." hover-class='active' hover-stay-time='100' bindtap='inputPassword'>.</view>
  </view>
  <view class='right ctr-btn'>
   <view class='ctr-btn-item' hover-class='active' hover-stay-time='100' bindtap='clear'>
    <label class='iconfont icon-shanchu'></label>
   </view>
   <view class='ctr-btn-item' hover-class='active' hover-stay-time='100' bindtap='passwordInputHidden'>取消</view>
  </view>
 </view>
</action-sheet>

CSS: 

.popup-memu {
 width: 100%;
 background-color: white;
 border-top: 1px solid #dedbd5;
 border-bottom: 1px solid #eee;
 display: block;
}
 
.line {
 background-color: #eee;
 margin-left: 10px;
 height: 1px;
 margin-right: 10px;
}
 
.popup-memu {
 height: 50px;
 font-size: 15px;
 line-height: 50px;
 border-bottom: 1px solid #eee;
}
 
.payMode {
 display: flex;
 background: #fff;
 align-items: center;
 border-bottom: 2px solid #eee;
}
 
.payMode image {
 width: 30px;
 height: 30px;
 margin-left: 18px;
 margin-right: 10px;
}
 
.sheet-content {
 background-color: #fff;
 padding: 0 15rpx;
}
/* 键盘 */
.password-input {
 display: flex;
 width: 660rpx;
 border: 1px solid #ddd;
 margin: 0 auto;
 margin-top: 50rpx;
 background-color: #fff;
 border-radius: 3px;
}
 
.password-input view {
 width: 110rpx;
 height: 80rpx;
 display: flex;
 align-items: center;
 justify-content: center;
 box-sizing: border-box;
 border-right: 1px solid #ccc;
}
 
.password-input view:nth-child(6) {
 border-right: none;
}
 
.password-input view text {
 width: 6px;
 height: 6px;
 border-radius: 50%;
 background-color: #333;
}
 
.tips {
 font-size: 28rpx;
 text-align: center;
 margin-top: 5px;
}
 
.tips text {
 color: #c30;
}
 
.keyboard {
 width: 100%;
 display: flex;
 background-color: #fff;
 border-top: 1px solid #eee;
 margin-top: 50rpx;
}
 
.keyboard .number {
 display: flex;
 width: 570rpx;
 flex-wrap: wrap;
}
 
.keyboard .number view {
 width: 190rpx;
 height: 120rpx;
 line-height: 120rpx;
 text-align: center;
 font-size: 46rpx;
 font-weight: bold;
 box-sizing: border-box;
 border-right: 1px solid #eee;
 border-bottom: 1px solid #eee;
}
 
.keyboard .ctr-btn {
 width: 180rpx;
}
 
.keyboard .ctr-btn view {
 height: 240rpx;
 line-height: 240rpx;
 text-align: center;
 box-sizing: border-box;
 border-bottom: 1px solid #eee;
}
 
.keyboard .ctr-btn view .iconfont {
 font-size: 44rpx !important;
 color: #c30;
}
 
.keyboard .ctr-btn view:nth-child(2) {
 font-size: 46rpx;
 color: #c30;
}
 
.keyboard .active {
 background-color: #e4e7ed;
}
 
.activity {
 background-color: #fff;
 padding: 25rpx 20rpx;
 display: flex;
 align-items: center;
 justify-content: space-between;
 font-size: 24rpx;
 border-bottom: 1px solid #f6f6f6;
}
 
.activity.activity-item {
 font-size: 26rpx;
}
 
.arrows-right {
 width: 30rpx;
 height: 30rpx;
}
 
.arrows-right.active {
 transform: rotate(270deg);
}
/* 键盘结束 */

 js:

Page({
 
 /**
  * 页面的初始数据
  */
 data: {
  inputPassword: '', //输入的密码
  passwordInputHidden: true,//hidden是true 默认隐藏
  pay_type: '',//支付方式
  password: 123456,//设置的密码 这里写死 实际开发中后台专门设置一个表存储用户设置的密码
 },
 
 /**
  * 生命周期函数--监听页面加载
  */
 onLoad: function (options) {
 
 },
 
 pay(e) {
  //你选择的支付方式
  var pay_type = e.currentTarget.dataset.pay_type;
  var _this = this;
  if (pay_type == 'weipay') { 
   //此处写入微信支付需要执行的代码不做过多介绍
  } else { 
   //内部支付 打开键盘
   _this.passwordInputHidden();
  }
 },
 
 
 inputPassword(e) {
  //键盘输入的密码 赋值给inputPassword
  this.data.inputPassword = this.data.inputPassword + e.currentTarget.dataset.key;
  this.setData({
   inputPassword: this.data.inputPassword
  });
  //当输入密码正确时 
  if (this.data.inputPassword.length == 6 && this.data.password == this.data.inputPassword) {
  
   this.passwordInputHidden();//关闭小键盘
  }
   //当输入密码错误时 给个提示 并且把输入的密码清零
  if (this.data.inputPassword.length == 6 && this.data.password != this.data.inputPassword) {
   wx.showModal({
    title: "提示",
    content: "输入密码错误",
   })
   this.setData({
    inputPassword: ''
   });
  }
 },
 passwordInputHidden() {
  this.setData({
   passwordInputHidden: !this.data.passwordInputHidden //取反 打开关闭小键盘
  });
  this.setData({
   inputPassword: ''
  });
 },
 //删除输入错误的密码
 clear() {
  var index = this.data.inputPassword.length;
  if (index > 0) {
   var inputPassword = this.data.inputPassword.substr(0, index - 1);
   this.setData({
    inputPassword: inputPassword
   });
  }
 },
 
})

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
jQuery 性能优化手册 推荐
Feb 23 Javascript
在vs2010中调试javascript代码方法
Feb 11 Javascript
jQuery.Validate验证库的使用介绍
Apr 26 Javascript
jquery表格datatables实例解析 直接加载和延迟加载
Aug 12 Javascript
利用js获取下拉框中所选的值
Dec 01 Javascript
手动初始化Angular的模块与控制器
Dec 26 Javascript
vue实现城市列表选择功能
Jul 16 Javascript
vue根据值给予不同class的实例
Sep 29 Javascript
微信小程序时间标签和时间范围的联动效果
Feb 15 Javascript
微信小程序的mpvue框架快速上手指南
May 15 Javascript
vue data引入本地图片的两种方式小结
Nov 13 Javascript
如何在vue中使用kindeditor富文本编辑器
Dec 19 Vue.js
微信小程序实现随机验证码功能
Dec 20 #Javascript
微信小程序实现发送验证码按钮效果
Dec 20 #Javascript
使用puppeteer爬取网站并抓出404无效链接
Dec 20 #Javascript
详解如何使用node.js的开发框架express创建一个web应用
Dec 20 #Javascript
js canvas实现橡皮擦效果
Dec 20 #Javascript
浅谈VueJS SSR 后端绘制内存泄漏的相关解决经验
Dec 20 #Javascript
Cocos2d实现刮刮卡效果
Dec 20 #Javascript
You might like
人大复印资料处理程序_补充篇
2006/10/09 PHP
PHP+SQL 注入攻击的技术实现以及预防办法
2010/12/29 PHP
8个必备的PHP功能实例代码
2013/10/27 PHP
php实例分享之html转为rtf格式
2014/06/02 PHP
PHP封装的数据库保存session功能类
2016/07/11 PHP
PHP合并数组函数array_merge用法分析
2017/02/17 PHP
一款js和css代码压缩工具[附JAVA环境配置方法]
2010/04/16 Javascript
在线一元二次方程计算器实例(方程计算器在线计算)
2013/12/22 Javascript
基于input框覆盖掉数字英文的实例讲解
2017/07/21 Javascript
vue中接口域名配置为全局变量的实现方法
2018/09/20 Javascript
实用Javascript调试技巧分享(小结)
2019/06/18 Javascript
WebStorm中如何将自己的代码上传到github示例详解
2020/10/28 Javascript
[37:37]DAC2018 4.4 淘汰赛 Optic vs Mineski 第二场
2018/04/05 DOTA
400多行Python代码实现了一个FTP服务器
2012/05/10 Python
Python 'takes exactly 1 argument (2 given)' Python error
2016/12/13 Python
python中如何正确使用正则表达式的详细模式(Verbose mode expression)
2017/11/08 Python
浅谈Python中的作用域规则和闭包
2018/03/20 Python
Python应用库大全总结
2018/05/30 Python
python实现给微信指定好友定时发送消息
2019/04/29 Python
Django框架静态文件使用/中间件/禁用ip功能实例详解
2019/07/22 Python
Python基于类路径字符串获取静态属性
2020/03/12 Python
PageFactory设计模式基于python实现
2020/04/14 Python
Keras 快速解决OOM超内存的问题
2020/06/11 Python
Python爬虫爬取微信朋友圈
2020/08/06 Python
python 将列表里的字典元素合并为一个字典实例
2020/09/01 Python
浅谈three.js中的needsUpdate的应用
2012/11/12 HTML / CSS
编码实现字符串转整型的函数
2012/06/02 面试题
C++面试题目
2013/06/25 面试题
物业管理大学生个人的自我评价
2013/10/10 职场文书
幼儿园教育教学反思
2014/01/31 职场文书
护士毕业生自我鉴定
2014/02/08 职场文书
淘宝客服专员岗位职责
2014/04/11 职场文书
教师自查自纠材料
2014/10/14 职场文书
工程催款通知书
2015/04/17 职场文书
施工现场安全管理制度
2015/08/05 职场文书
2016年班主任培训心得体会
2016/01/07 职场文书