原生微信小程序实现手写签名功能

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

项目中有遇到在小程序上实现手动签名功能,今天给大家分享下代码
wxml 文件代码如下,catchtouchmove属性一定要加上,否则移动起来连笔非常不流畅

<view class="content" catchtouchmove="true">
  <view class="canvasBox">
    <text class="title">请在下面的白框中签名</text>
    <text class="tips">签名既承诺所填信息完全属实</text>
    <view class="sign-canvas-view">
      <canvas
        type="2d"
        id="myCanvas"
        style="width:702rpx;height:200px;"
        disable-scroll
        capture-bind:touchstart="touchStart"
        capture-bind:touchmove="touchMove">
      </canvas>
    </view>
  </view>
  <view class="submitBtn">
    <van-button plain  block style="width: 30vw;" bindtap="reset">重置</van-button>
    <van-button bindtap="sure" block style="width: 30vw;" type="primary">提交</van-button>
  </view>
</view>

wxss代码

.content {
  width: 100vw;
  height: 100vh;
}

.canvasBox {
  margin-top: 10px;
  background-color: #fff;
  width: 100%;
  border-radius: 10px;
  display: flex;
  flex-direction: column;
  justify-content: space-around;
}
.title {
  font-size: 32rpx;
  padding: 0 24rpx;
}
.title::before {
  content: '*';
  color: red;
}
.tips {
  width: 100%;
  color: red;
  padding: 20px;
  box-sizing: border-box;
}
.sign-canvas-view {
  box-sizing: border-box;
  border: 2rpx solid grey;
  margin: 0 24rpx;
}

.submitBtn {
  width: 100%;
  display: flex;
  justify-content: space-around;
  align-items: center;
  margin-top: 30px;
}

js代码

import appConfig from "../../../utils/globalConfig.js";
const {
    payAfterTreatmentSignUp
  } = require("../../../utils/api.js")
const globalConfig = require('../../../utils/globalConfig.js');
Page({
  data:{
      signPath:[],
      cardNo:'',
      preX:'',
      preY:'',
      apiUrl:appConfig.getLocalConfig().apiUrl,
  },
  onLoad(options){
    this.setData({
      cardNo:options.cardNo
    })
    wx.createSelectorQuery().select('#myCanvas').fields({node: true,size: true}).exec(this.init.bind(this))
  },
  init(data){
    console.log(data);
    const width = data[0].width;
    const height=data[0].height;
    const canvas = data[0].node;
    const ctx = canvas.getContext('2d');
    const dpr = wx.getSystemInfoSync().pixelRatio

    canvas.width = width * dpr
    canvas.height =  height * dpr
    ctx.scale(dpr,dpr)

    this._dpr = dpr
    this._ctx = ctx
    this._canvas = canvas
  },
  touchStart(e){
      console.log(e)
      const { _ctx:ctx } = this
      const { clientX:x ,clientY:y } = e.touches[0]
      ctx.beginPath()
      // ctx.moveTo(x-e.target.offsetLeft, y-e.target.offsetTop)
      ctx.moveTo(x-e.target.offsetLeft, y-e.target.offsetTop)
      this.setData({
        preX:x-e.target.offsetLeft,
        preY:y-e.target.offsetTop,
    })
  },    
  touchMove(e){
      const { _ctx:ctx } = this
      const { clientX:x ,clientY:y } = e.touches[0]
      this.data.signPath.push([x,y])
      this.setData({
          signPath:this.data.signPath
      })
      let preX = this.data.preX
      let preY = this.data.preY
      let curX = x-e.target.offsetLeft
      let curY = y-e.target.offsetTop
      let deltaX = Math.abs(preX - curX)
      let deltaY = Math.abs(preY - curY)
      if (deltaX >= 3 || deltaY >= 3) {
        // 前后两点中心点
        let centerX = (preX + curX) / 2
        let centerY = (preY + curY) / 2
  
        //这里以前一点作为控制点,中心点作为终点,起始点为上一次的中点,很流畅啊!
        ctx.quadraticCurveTo(preX, preY, centerX, centerY);
        ctx.stroke();
        this.setData({
          preX:curX,
          preY:curY,
      })
      }
      // ctx.lineTo(x-e.target.offsetLeft, y-e.target.offsetTop)
      // ctx.lineTo(x, y)
      // ctx.stroke()
  
  },
  //重绘
  reset(){
      const { _ctx:ctx,_canvas:canvas } = this

      this.setData({
          signPath:[]
      })
      ctx.clearRect(0, 0, canvas.width, canvas.height)
  },
  //提交签名图片
  sure(){
      
      if(this.data.signPath.length <= 0){
          wx.showToast({
            title: '签名不能为空',
            icon:'none'
          })
          return 
      }

      //导出图片
      this.outImage()
  },
  sureSignature(){
    if(this.data.signPath.length <= 0){
        wx.showToast({
          title: '签名不能为空',
          icon:'none'
        })
        return 
    }
  },
  outImage(){
      const { _canvas:canvas,_dpr:dpr } = this
      var image = canvas.toDataURL("image/png"); // 得到生成后的签名base64位  url 地址
      payAfterTreatmentSignUp({
        cardNo:this.data.cardNo,
        signBase64:image
      },globalConfig.getLocalConfig().zyUrl).then(res=>{
          console.log(res);
          wx.showToast({
            title: '签约成功',
          })
          setTimeout(()=>{
            wx.navigateBack({
                delta: 1
              })
          },2000)

      })
  }
})

效果如下
微信小程序手写签名,微信小程序,javascript,前端文章来源地址https://www.toymoban.com/news/detail-562428.html

到了这里,关于原生微信小程序实现手写签名功能的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

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

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

相关文章

  • 微信小程序(原生)搜索功能实现

     一、效果图  二、代码 wxml scss js json文件是引入的vant

    2024年02月11日
    浏览(36)
  • 微信小程序原生开发功能合集十五:个人主页功能实现

      本章个人主页功能实现,展示当前登录用户信息、个人主页、修改密码、浏览记录、我的收藏、常见问题、意见反馈、关于我们等界面及对应功能实现。   另外还提供小程序开发基础知识讲解课程,包括小程序开发基础知识、组件封装、常用接口组件使用及常用功能实

    2024年02月06日
    浏览(71)
  • 微信小程序原生开发功能合集十六:系统主页实现

      本章实现小程序主页开发及对应逻辑处理,实现问卷填报相关功能,实现问卷查看、问卷查看、填报历史等功能的实现。   另外还提供小程序开发基础知识讲解课程,包括小程序开发基础知识、组件封装、常用接口组件使用及常用功能实现等内容,具体如下:   

    2024年02月10日
    浏览(27)
  • 原生微信小程序,多音频播放实现进度条功能

    小程序的音频组件没有进度条的功能,业务需要,只好烧脑自己实现。 逻辑思路: 1.所有音频播放、停止按钮使用状态切换控制 2.当点击某个音频播放时,首先将所有音频的状态置为停止状态,然后将当前音频置为播放状态 3.滚动条插件配合音频控件一起使用 4.播放状态时滚

    2024年02月11日
    浏览(46)
  • 微信小程序原生开发功能合集十二:编辑界面的实现

      本章实现编辑界面的实现处理,包括各编辑组件的使用及添加数据保存数据流程的实现处理。   另外还提供小程序开发基础知识讲解课程,包括小程序开发基础知识、组件封装、常用接口组件使用及常用功能实现等内容,具体如下:    1. CSDN课程: https://edu.csdn.ne

    2024年02月02日
    浏览(36)
  • 微信小程序实现拼团功能javascript + swiper

    实现以上的拼团功能,纯自己手写 1.js 部分自己封装的方法,需要后台返回拼团组,主要包括团长信息,团结束时间等,核心是要拼接上面的最后面的1秒只内从9减到0的倒计时,给用户一种紧迫感 startCountdown: function () { const that = this; const timer = setInterval(function () { const groups =

    2024年02月02日
    浏览(34)
  • Html+JavaScript实现手写签名

    Hello各位,本葡萄又来啦,今天遇到的场景是这样的:在日常业务流程中,经常需要某一流程环节中相关责任人员进行审批签字,早期许多公司为了省事就直接会把这位负责人的签名以键盘打字(楷体)的形式打印出来,但是这样的坏处就是会导致所有的负责人的签名都是一

    2024年02月12日
    浏览(32)
  • JavaScript实现手写签名,可触屏手写,支持移动端与PC端双端保存

    1.HTML模板 2.获取DOM元素和定义变量 3.创建两个canvas元素,并设置它们的宽度和高度 4.绑定触摸事件:touchstart, touchmove, touchend和click 5.实现触摸事件回调函数:startDrawing, draw和stopDrawing 6.实现绘制线段的函数:drawLine 7.实现清除签名的函数:clearSignature 8.实现保存签名的函数:

    2024年01月16日
    浏览(36)
  • C# 结合JavaScript实现手写板签名并上传到服务器

    我们最近开发了一款笔迹测试功能的程序(测试版),用户在手写板上手写签名,提交后即可测试出被测试者的心理素质评价分析。类似功能的场景还比如,在银行柜台办理业务,期间可能需要您使用手写设备进行签名并确认;保险续期小程序,到期后需要你在确认续期条款

    2024年04月29日
    浏览(30)
  • 微信小程序原生开发功能合集二:下拉选择组件封装

      本章实现小程序中下拉选择组件的封装实现,通过自定义组件的方式实现下拉选择功能,使用小程序的picker组件实现下拉数据的展示及相关自定义处理,封装数据加载过程,数据切换逻辑监听等。   本节实现select组件的开发说明,另使用nodejs创建express服务器,为远程

    2024年02月02日
    浏览(36)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包