广告
返回顶部
首页 > 资讯 > 前端开发 > JavaScript >微信小程序实现简单手写签名组件的方法实例
  • 511
分享到

微信小程序实现简单手写签名组件的方法实例

2024-04-02 19:04:59 511人浏览 安东尼
摘要

目录背景:需求:效果一、思路 二、实现 1. 页面与样式 2. 初始化 3. 点击时 4. 签名时 三、总结 背景: 在做项目过程中,需要在微信小程序中实现手写签名组件。在网上找了微

背景:

在做项目过程中,需要在微信小程序中实现手写签名组件。在网上找了微信小程序手写签名实现,但是都是不太理想。在实际运用中,会因为实时计算较多的贝塞尔曲线而产生卡顿。效果不理想。所以退一步,不需要笔锋以及笔迹模拟效果。只需要简单的手写签名实现。

需求:

可以实现用户在微信小程序上手写签名。

需要组件化。

效果

一、思路

在微信小程序中,我们使用canvas组件实现。将用户的输入想象成为一只笔。我们要画的签名是由很多点构成的。但是单纯的点是不能很好地构成线。点与点之间还要由线连接。下面是实现过程代码。

二、实现

1. 页面与样式

wxml

这里的canvas组件是最新的用法。


<view class="dashbox">
  <view class="btnList">
    <van-button size="small" bind:click="clearCanvas">清空</van-button>
  </view>
  <view class="handCenter">
    <canvas 
      class="handWriting" 
      disable-scroll="{{true}}" 
      id="handWriting"
      bindtouchstart="scaleStart"
      bindtouchmove="scaleMove" 
      bindtouchend="scaleEnd"
      bindtap="mouseDown"
      type="2d"
    >
    </canvas>
  </view>
</view>

wxss


.btnList{
    width: 95%;
    margin:0 auto;
}
.handWriting{
    background: #fff;
    width: 95%;
    height: 80vh;
    margin:0 auto
}

2. 初始化

由于是在自定义组件中使用,所以要注意获取canvas的时候的this指向问题。如果不调用SelectorQuery的In方法,那么就在自定义组件获取不到canvas,因为这个时候指向的父组件。


Component({
 
    data: {
        canvasName:'#handWriting',
        ctx:'',
        canvasWidth:0,
        canvasHeight:0,
        startPoint:{
            x:0,
            y:0,
        },
        selectColor: 'black',
        lineColor: '#1A1A1A', // 颜色
        lineSize: 1.5,  // 笔记倍数
        radius:5,//画圆的半径
    }, 
    ready(){
        let canvasName = this.data.canvasName;
        let query = wx.createSelectorQuery().in(this);//获取自定义组件的SelectQuery对象
        query.select(canvasName)
        .fields({ node: true, size: true })
        .exec((res) => {
          const canvas = res[0].node;
          const ctx = canvas.getContext('2d');
          //获取设备像素比
          const dpr = wx.getSystemInfoSync().pixelRatio;
          //缩放设置canvas画布大小,防止笔迹错位
          canvas.width = res[0].width * dpr;
          canvas.height = res[0].height * dpr;
          ctx.scale(dpr, dpr);
          ctx.lineJoin="round";
          this.setData({ctx});
        });
  
        query.select('.handCenter').boundinGClientRect(rect => {
            console.log('rect', rect);
            this.setData({
                canvasWidth:rect.width,
                canvasHeight:rect.height
            });
        }).exec();
    },
   //省略以下代码......
});

3. 点击时


Component({
 //省略以上代码...
 methods: {
            scaleStart(event){
                if (event.type != 'touchstart') return false;
                let currentPoint = {
                    x: event.touches[0].x,
                    y: event.touches[0].y
                }
                this.drawCircle(currentPoint);
                this.setData({startPoint:currentPoint});
          },
            drawCircle(point){//这里负责点
                let ctx = this.data.ctx;
                ctx.beginPath();
                ctx.fillStyle = this.data.lineColor;
            //笔迹粗细由圆的大小决定
                ctx.arc(point.x, point.y, this.data.radius, 0 , 2 * Math.PI);
                ctx.fill();
                ctx.closePath();
          },
          //省略以下代码...
 }
})

4. 签名时


Component({
  //省略以上代码
  methods:{
 drawLine(sourcePoint, targetPoint){
            let ctx = this.data.ctx;
            this.drawCircle(targetPoint);
            ctx.beginPath();
            ctx.strokeStyle = this.data.lineColor;
            ctx.lineWidth = this.data.radius * 2;//这里乘2是因为线条的粗细要和圆的直径相等
            ctx.moveTo(sourcePoint.x, sourcePoint.y);
            ctx.lineTo(targetPoint.x, targetPoint.y);
            ctx.stroke();
            ctx.closePath();
          },
          clearCanvas(){//清空画布
            let ctx = this.data.ctx;
            ctx.rect(0, 0, this.data.canvasWidth, this.data.canvasHeight);
            ctx.fillStyle = '#FFFFFF';
            ctx.fill();
          }
  }
})

三、总结

这个手写签名仅仅是为了业务应急使用。如果要优化的话,可以从笔锋模拟和笔迹模拟中入手。只不过要解决在实时模拟过程中卡顿的问题。

到此这篇关于微信小程序实现简单手写签名组件的文章就介绍到这了,更多相关微信小程序手写签名组件内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

--结束END--

本文标题: 微信小程序实现简单手写签名组件的方法实例

本文链接: https://www.lsjlt.com/news/130170.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • 微信小程序实现简单手写签名组件的方法实例
    目录背景:需求:效果一、思路 二、实现 1. 页面与样式 2. 初始化 3. 点击时 4. 签名时 三、总结 背景: 在做项目过程中,需要在微信小程序中实现手写签名组件。在网上找了微...
    99+
    2022-11-12
  • 微信小程序怎么实现简单手写签名组件
    这篇文章主要介绍了微信小程序怎么实现简单手写签名组件的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇微信小程序怎么实现简单手写签名组件文章都会有所收获,下面我们一起来看看吧。需求:可以实现用户在微信小程序上手写签...
    99+
    2023-06-08
  • 微信小程序实现手写签名
    本文实例为大家分享了微信小程序实现手写签名的具体代码,供大家参考,具体内容如下 本示例具备的功能: 1、笔迹绘制 2、笔迹清空 以下是js代码: var content = null...
    99+
    2022-11-13
  • 微信小程序canvas实现手写签名
    本文实例为大家分享了微信小程序canvas实现手写签名的具体代码,供大家参考,具体内容如下 很多时候,程序中需要用到签名的功能,附上源码(微信小程序) .wxml <view...
    99+
    2022-11-13
  • 微信小程序怎么实现一个手写签名组件
    这期内容当中小编将会给大家带来有关微信小程序怎么实现一个手写签名组件,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。背景:在做项目过程中,需要在微信小程序中实现手写签名组件。在网上找了微信小程序手写签名实现...
    99+
    2023-06-20
  • 微信小程序实现手写签名的示例代码
    目录1.效果图2.相关代码canvas代码js相关在微信小程序上实现手写签名,获取canvascontext新版本和旧版本有点坑,新版本在获取canvas后如果页面有滑动,则签名坐标...
    99+
    2022-11-13
  • 微信小程序实现手写签名(签字版)
    本文实例为大家分享了微信小程序实现手写签名的具体代码,供大家参考,具体内容如下 公司近期有个需要用户签名的功能,就用小程序canvas写了个 wxml <view class...
    99+
    2022-11-13
  • 微信小程序实现横屏手写签名
    本文实例为大家分享了微信小程序实现横屏手写签名的具体代码,供大家参考,具体内容如下 1.关键配置: "pageOrientation": "landsc...
    99+
    2022-11-13
  • 微信小程序如何实现手写签名
    这篇文章主要介绍了微信小程序如何实现手写签名的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇微信小程序如何实现手写签名文章都会有所收获,下面我们一起来看看吧。效果wxml<view class=&...
    99+
    2023-07-02
  • 微信小程序怎么实现手写签名
    本文小编为大家详细介绍“微信小程序怎么实现手写签名”,内容详细,步骤清晰,细节处理妥当,希望这篇“微信小程序怎么实现手写签名”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。在微信小程序上实现手写签名,获取canva...
    99+
    2023-06-29
  • 微信小程序实现选项卡的简单实例
    本文实例为大家分享了微信小程序实现选项卡的具体代码,供大家参考,具体内容如下 效果图 实现的功能:点击上面选项卡,下面商品内容实现切换,滑动下面的商品页面,上面的选项也随页面进行切...
    99+
    2022-11-13
  • 微信小程序实现吸顶效果的方法实例
    目录1. 实现方式2. 存在的问题3. 考虑是否有更好的实现方式总结背景是做一个日期title随着用户滑动,当滑到当前日期list数据时,有一个吸顶效果,并且该效果与原来样式不一样 ...
    99+
    2022-11-12
  • 微信小程序地图定位的实现方法实例
    目录前言方法如下总结:前言 地图定位这个功能大家都很熟悉吧,那微信小程序中要怎么实现地图定位呢,其实非常简单,没有大家想象中那么难,看完本篇文章,你也可以轻松实现这个小功能哦。 方法...
    99+
    2022-11-13
  • 微信小程序实现锚点定位功能的方法实例
    前言 在小程序开发中,我们经常会遇到滚动列表查看的需求,那么使用锚点定位来实现可以达到交互体验更加友好的效果,我们看下项目中实现的效果:    &nbs...
    99+
    2022-11-12
  • 微信小程序页面间传值的实现方法示例
    小程序页面间传值 大家晚上好,说晚上好是因为是在晚上写的,说这句话是因为这句话开篇不那么突然。那么小程序的页面间传值,在我使用这段时间里,我就非常的主观的把它们分为wx.navig...
    99+
    2022-11-12
  • 微信小程序实现自定义弹窗组件的示例代码
    目录编写组件代码Dialog.wxmlDialog.jsDialog.wxss调用自定义组件上一篇中说的是小程序自带的弹窗组件,今天,我们来试试小程序的自定义组件,我们自定义一个带确...
    99+
    2022-11-13
  • 微信小程序中<swiper-item>标签传入数据的实现方法
    这篇文章将为大家详细讲解有关微信小程序中<swiper-item>标签传入数据的实现方法,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。微信小程序 <sw...
    99+
    2022-10-19
  • 微信小程序实现可以截断的瀑布流组件的示例代码
    瀑布流是一种常见的布局方式,实现的方式有许多,比如直接分两列,然后控制在左右两列加入元素;还有一种方式就是通过绝对定位的方式来放置两边。本文所要介绍的瀑布流不同于常规的,因为瀑布流中...
    99+
    2022-11-13
  • Uniapp微信小程序实现全局事件监听并进行数据埋点的方法
    目录零、前言一、软件环境二、相关分析及实现uniapp编译微信小程序时对于事件的处理分析源Vue模板及编译产物wxml对照微信小程序自定义组件Component分析事件对象并编写事件...
    99+
    2022-11-16
    微信小程序监听全局点击事件 小程序全局变量监听 uniapp微信小程序全局事件监听
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作