微信小程序自定义键盘

这篇具有很好参考价值的文章主要介绍了微信小程序自定义键盘。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

 效果图

微信小程序自定义键盘

 功能

  • 如果输入.直接补0.
  • 如果是09 直接是9
  • 如果是000那就有一个0
  • 不能大于6位
  • 小数点不能大于两位仅能出现一次
  • 还有不输入是禁止支付的
  • 不能小于0.01
  • 失去焦点隐藏面板
  • 光标问题有点小bug 望大佬指点

完整代码

wxml

<view class="page_box" catchtap="hindKeyboard">
    <view class="input_view" catchtap="hindKeyboard">
        <text class="title">收款金额:</text>
        <view class="input_box" catchtap="showKeyboard">
            <text class="input_label">¥</text>
            <view class="content" wx:if="{{content.length}}">
                <view wx:for="{{content}}" wx:key="index" data-str-index="{{index + 1}}" catchtap="getStrPosition">
                    <view class="number-block">
                        {{item}}
                        <!-- 光标 -->
                        <view class="cursor cursor-insert" wx:if="{{cursorIndex === index + 1}}"></view>
                    </view>
                </view>
            </view>
            <view class="cursor" wx:if="{{!cursorIndex}}"></view>
            <text class="default-content" wx:if="{{!content.length}}">{{defaultContent}}</text>
        </view>
    </view>
    <!-- 键盘 -->
    <view class="keyboard {{keyShow&&'hind_box'}}">
        <view class="key-box">
            <view class="number-box clearfix">
                <view wx:for="{{KeyboardKeys}}" wx:key="*this" data-keys="{{item}}" class="key {{ index === 9 ? 'key-zero' : ''}}" hover-class="number-box-hover" catchtap="keyTap">
                    {{item}}
                </view>
            </view>
            <view class="btn-box">
                <!-- TODO: 需要替换成删除icon -->
                <view class="key" hover-class="number-box-hover" data-keys="<" catchtap="keyTap">
                    X
                </view>
                <view class="key pay_btn {{payMoney ? '' : 'pay-btn-display'}}" hover-class="pay-btn-hover" catchtap="handlePay">
                    付款
                </view>
            </view>
        </view>
    </view>
</view>

wxss

page {
    background: #f3f7f7;
    height: 100%;
}

.page_box {
    width: 100%;
    height: 100%;
    background: #f3f7f7;
    overflow: hidden;
}

.input_view {
    width: 700rpx;
    height: 500rpx;
    background: #fff;
    margin: 25rpx auto;
    border-radius: 10rpx;
    padding: 40rpx;
    box-sizing: border-box;
}

.title {
    display: block;
    line-height: 90rpx;
    font-size: 30rpx;
    color: #aaa;
}

.input_box {
    display: flex;
    align-items: center;
    padding: 20rpx 0;
    height: 90rpx;
    border-bottom: 1px solid #efefef;
}

.input_label {
    font-size: 35rpx;
    font-weight: bold;
    margin-right: 5rpx;
}

.content {
    display: flex;
    font-size: 80rpx;
    line-height: 90rpx;
    font-weight: 700;
}

.number-block {
    position: relative;
}

/* 光标 */
.cursor-insert {
    position: absolute;
    top: 0rpx;
    right: -1rpx;
}

.cursor {
    width: 2rpx;
    height: 90rpx;
    background: #666;
    border-radius: 6rpx;
    animation: twinkling 0.9s infinite;
}

@-webkit-keyframes twinkling {
    0% {
        background: #fff;
    }

    100% {
        background: #666;
    }
}

.default-content {
    color: #999;
    font-size: 38rpx;
    font-weight: 600;
}

/* 键盘 */
.keyboard {
    position: fixed;
    left: 0;
    right: 0;
    bottom: 0;
    z-index: 999;
    height: 0;
    background: #f7f7f7;
    transition: height 0.3s;
}

.hind_box {
    height: 456rpx;
}

.key-box {
    display: flex;
    padding-left: 16rpx;
    padding-bottom: 16rpx;
    padding-bottom: calc(16rpx + constant(safe-area-inset-bottom));
    padding-bottom: calc(16rpx + env(safe-area-inset-bottom));
}

.number-box {
    flex: 3;
}

.number-box .key {
    float: left;
    margin: 16rpx 16rpx 0 0;
    width: calc(100% / 3 - 16rpx);
    height: 90rpx;
    border-radius: 10rpx;
    line-height: 90rpx;
    text-align: center;
    font-size: 40rpx;
    font-weight: bold;
    background-color: #fff;
}

.number-box .key.key-zero {
    width: calc((100% / 3) * 2 - 16rpx);
}

.keyboard .number-box-hover {
    /* 临时定义颜色 */
    background-color: #e1e1e1 !important;
}

.btn-box {
    flex: 1;
}

.btn-box .key {
    margin: 16rpx 16rpx 0 0;
    height: 90rpx;
    border-radius: 10rpx;
    line-height: 90rpx;
    text-align: center;
    font-size: 40rpx;
    font-weight: bold;
    background-color: #fff;
}

.btn-box .pay_btn {
    height: 298rpx;
    line-height: 298rpx;
    font-weight: normal;
    background-color: #1AAD19;
    color: #fff;
    font-size: 32rpx;
}

.btn-box .pay_btn.pay-btn-display {
    background-color: #9ED99D !important;
}

.btn-box .pay_btn.pay-btn-hover {
    background-color: #179B16;
}

js文章来源地址https://www.toymoban.com/news/detail-514850.html

// pages/inputs/inputs.js
Page({
  data: {
    content: [], // 输入的金额
    payMoney: '', // 支付金额
    defaultContent: '请输入', // 默认内容
    KeyboardKeys: ['1', '2', '3', '4', '5', '6', '7', '8', '9', '0', '.'],
    keyShow: true,  // 是否展示键盘
    cursorIndex: '', // 插入光标位置
  },
  //点击界面键盘消失
  hindKeyboard() {
    this.setData({ keyShow: false });
  },
  //点击输入框,键盘显示
  showKeyboard() {
    this.setData({ keyShow: true });
  },
  // 获取插入光标位置
  getStrPosition(e) {
    let { strIndex } = e.currentTarget.dataset
    this.setData({ cursorIndex: strIndex })
  },
  keyTap(e) {
    let { keys } = e.currentTarget.dataset,
      content = this.data.content.join(''),   // 转为字符串
      strLen = content.length,
      { cursorIndex } = this.data
    switch (keys) {
      case '.':
        if (content.indexOf('.') === -1) {   // 已有一个点的情况下
          content.length < 1 ? content = '0.' : content += '.'
        }
        break
      case '<':
        if (cursorIndex > 0 && cursorIndex !== strLen) {
          // 从插入光标开始删除元素
          this.data.content.splice(cursorIndex - 1, 1)
          content = this.data.content.join('')
        } else {
          content = content.substr(0, content.length - 1)
        }
        if (!strLen || cursorIndex === strLen) {    // 插入光标位置重置
          this.setData({ cursorIndex: '' })
        }
        // 删除点 组件中可以用Observer监听删除点和删除0的情况
        if (content[0] === '0' && content[1] !== '.') {
          content = content.substr(1, content.length - 1)
        }
        if (content[0] === '.') {
          content = '0' + content
        }
        break
      default:
        let spotIndex = content.indexOf('.')          //小数点的位置
        if (content[0] === '0' && content[1] !== '.') {
          content = content.substr(1, content.length - 1)
        }
        if ((spotIndex === -1 || strLen - spotIndex !== 3)) {  //小数点后只保留两位
          content += keys
        }
        break

    }

    if (content <= 100000) {
      this.setData(
        {
          content: content.split(''),// 转为数组
          payMoney: content // 支付金额
        }
      )
    } else {
      wx.showToast({
        title: '支付金额不能大于100000',
        icon: 'none',
        duration: 1500,
      })
    }
  },
  handlePay() {
    const { payMoney } = this.data
    if (payMoney === '') return
    if (payMoney < '0.01') {
      wx.showToast({
        title: '支付金额不能小于0.01',
        icon: 'none',
        duration: 1500,
      })
      return
    }
    console.log(Number(payMoney), '付款')
  }


})

到了这里,关于微信小程序自定义键盘的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 基于微信校园浴室预约小程序毕业设计成品作品(1)系统效果图

    博主介绍: 《Vue.js入门与商城开发实战》《微信小程序商城开发》图书作者,CSDN博客专家,在线教育专家,CSDN钻石讲师;专注大学生毕业设计教育和辅导。 所有项目都配有从入门到精通的基础知识视频课程,免费 项目配有对应开发文档、开题报告、任务书、PPT、论文模版

    2024年02月08日
    浏览(38)
  • 基于微信评选投票小程序系统毕业设计作品成品(1)系统效果图

    博主介绍:《Vue.js入门与商城开发实战》《微信小程序商城开发》图书作者,CSDN博客专家,在线教育专家,CSDN钻石讲师;专注大学生毕业设计教育和辅导。 所有项目都配有从入门到精通的基础知识视频课程,免费 项目配有对应开发文档、开题报告、任务书、PPT、论文模版等

    2024年02月07日
    浏览(35)
  • 基于微信校园共享洗衣小程序毕业设计成品作品(1)系统效果图

    博主介绍: 《Vue.js入门与商城开发实战》《微信小程序商城开发》图书作者,CSDN博客专家,在线教育专家,CSDN钻石讲师;专注大学生毕业设计教育和辅导。 所有项目都配有从入门到精通的基础知识视频课程,免费 项目配有对应开发文档、开题报告、任务书、PPT、论文模版

    2024年02月08日
    浏览(34)
  • 基于微信校园维修报修交易小程序毕业设计成品作品(1)系统效果图

    博主介绍: 《Vue.js入门与商城开发实战》《微信小程序商城开发》图书作者,CSDN博客专家,在线教育专家,CSDN钻石讲师;专注大学生毕业设计教育和辅导。 所有项目都配有从入门到精通的基础知识视频课程,免费 项目配有对应开发文档、开题报告、任务书、PPT、论文模版

    2024年02月06日
    浏览(25)
  • 基于微信驾校模拟考试小程序毕业设计成品作品全套(1)系统效果图

    博主介绍: 《Vue.js入门与商城开发实战》《微信小程序商城开发》图书作者,CSDN博客专家,在线教育专家,CSDN钻石讲师;专注大学生毕业设计教育和辅导。 所有项目都配有从入门到精通的基础知识视频课程,免费 项目配有对应开发文档、开题报告、任务书、PPT、论文模版

    2024年02月08日
    浏览(31)
  • 基于微信体育运动场地预约小程序毕业设计成品作品(1)系统效果图

    博主介绍: 《Vue.js入门与商城开发实战》《微信小程序商城开发》图书作者,CSDN博客专家,在线教育专家,CSDN钻石讲师;专注大学生毕业设计教育和辅导。 所有项目都配有从入门到精通的基础知识视频课程,免费 项目配有对应开发文档、开题报告、任务书、PPT、论文模版

    2024年02月09日
    浏览(52)
  • 基于微信电子书小说阅读小程序毕业设计成品作品(1)系统效果图

    博主介绍: 《Vue.js入门与商城开发实战》《微信小程序商城开发》图书作者,CSDN博客专家,在线教育专家,CSDN钻石讲师;专注大学生毕业设计教育和辅导。 所有项目都配有从入门到精通的基础知识视频课程,免费 项目配有对应开发文档、开题报告、任务书、PPT、论文模版

    2024年02月08日
    浏览(35)
  • 基于微信在线教育视频学习小程序毕业设计作品成品(1)系统效果图

    博主介绍: 《Vue.js入门与商城开发实战》《微信小程序商城开发》图书作者,CSDN博客专家,在线教育专家,CSDN钻石讲师;专注大学生毕业设计教育和辅导。 所有项目都配有从入门到精通的基础知识视频课程,免费 项目配有对应开发文档、开题报告、任务书、PPT、论文模版

    2024年02月07日
    浏览(28)
  • 基于微信电影院选座购票小程序毕业设计成品作品全套(1)系统效果图

    博主介绍:《 Vue.js入门与商城开发实战》《微信小程序商城开发》图书作者,CSDN博客专家,在线教育专家,CSDN钻石讲师;专注大学生毕业设计教育和辅导。 所有项目都配有从入门到精通的基础知识视频课程,免费 项目配有对应开发文档、开题报告、任务书、PPT、论文模版

    2024年02月08日
    浏览(37)
  • 基于微信教室预约小程序毕业设计成品作品(1)系统效果图

    博主介绍: 《Vue.js入门与商城开发实战》《微信小程序商城开发》图书作者,CSDN博客专家,在线教育专家,CSDN钻石讲师;专注大学生毕业设计教育和辅导。 所有项目都配有从入门到精通的基础知识视频课程,免费 项目配有对应开发文档、开题报告、任务书、PPT、论文模版

    2024年02月07日
    浏览(36)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包