不用懂代码,新手也可以使用Trae实现一个电子签名

你是不是经常遇到一些银行页面在同意条款之后就需要手写签名,是不是好奇前端是怎么来实现的电子签名。

今天就让Trae来帮我们揭秘这个电子签名是怎么实现的,以及帮我们捋清楚,要完成哪些功能以及注意事项,让我们的电子签名完美的运行

先来看看最终的效果,最上面是canvas的签名区,可以清除、撤销、调整笔画的颜色和粗细,点击确定之后就会生成图片,用户可以选择是否下载,还会在本地生成历史的签名方便其他场景复用~

看看Trae使用的是啥技术栈,index.html中使用的是canvas,以及引入一个第三方的依赖库来实现电子签名的

首先先让Trae创建一个文件来存放电子签名的代码,后续部署可以直接使用这个文件夹部署到nginx上面

我们只是简单的一句话,Trae就非常专业的帮我们考虑到样式以及生成图片等核心功能,为了方便新手用户,还特意写了说明文档,并且启动了项目

第一版,我去使用了,发现鼠标和笔画对不上,笔画在鼠标下面,这个用户体验真的很糟糕,所以我让Trae进行了优化,我们拭目以待,看看Trae有没有能力把这个问题给解决掉

Trae马上识别到了问题的存在的关键,并进行了优化,以下是Trae的优化

首先是改进了SignaturePad的初始化配置

然后重写了Canvas大小调整函数

js 复制代码
function resizeCanvas() {
    // 获取设备像素比
    const ratio = Math.max(window.devicePixelRatio || 1, 1);
    const container = canvas.parentElement;
    
    // 保存当前的绘图数据(如果有)
    let data = null;
    if (!signaturePad.isEmpty()) {
        data = signaturePad.toData();
    }
    
    // 设置canvas的显示大小(CSS像素)
    canvas.style.width = container.offsetWidth + 'px';
    canvas.style.height = '300px';
    
    // 设置canvas的实际大小(物理像素)
    canvas.width = container.offsetWidth * ratio;
    canvas.height = 300 * ratio;
    
    // 调整canvas的坐标系统
    const ctx = canvas.getContext('2d');
    ctx.scale(ratio, ratio);
    
    // 清除签名并恢复数据(如果有)
    signaturePad.clear();
    if (data) {
        signaturePad.fromData(data);
    }
}

添加了SignaturePad重新绑定函数

php 复制代码
function rebindSignaturePad() {
    // 解除当前的SignaturePad实例
    signaturePad.off();
    
    // 重新创建SignaturePad实例
    signaturePad = new SignaturePad(canvas, {
        minWidth: penSize.value / 2,
        maxWidth: penSize.value * 2,
        penColor: penColor.value,
        backgroundColor: 'rgba(255, 255, 255, 0)',
        velocityFilterWeight: 0.7,
        throttle: 16,
        dotSize: function() {
            return (this.minWidth + this.maxWidth) / 2;
        }
    });
    
    // 重新绑定endStroke事件
    signaturePad.addEventListener('endStroke', () => {
        saveDrawState();
    });
}

在关键时刻重新绑定SignaturePad

  • 窗口大小改变时
  • 画笔颜色改变时
  • 画笔大小改变时
  • 初始化时

最终Trae定位到的原因是设备像素比处理 :正确处理了高DPI屏幕(如Retina显示器)上的像素比例,确保物理像素和CSS像素的正确映射

手动再次书写,没有问题,试一下移动端也是可以完美的签名,本次的电子签名就完成了,不到五分钟,很好,推荐大家来试试Trae

相关推荐
豆包MarsCode1 天前
一文读懂什么是 Fork
trae
百万蹄蹄向前冲1 天前
妙!文档懒得写,就让AI 生成新员工学习指南
前端·后端·trae
豆包MarsCode1 天前
求职必备|如何用 TraeCode 搭建 3D 作品集网站
trae
豆包MarsCode7 天前
AI 圈爆火的 Jev 是什么?如何在 TraeCode 中使用
trae
带电的小王7 天前
Trae + Agnes:接入无限期免费文本、图片、视频模型,告别 Token 焦虑
trae·agnes·免费模型
百慕大三角8 天前
AI 写代码最大的风险不是不会写,而是太能写:我给 Coding Agent 加的 4 层工程约束
前端·ai编程·trae
豆包MarsCode11 天前
如何用 TraeCode 构建个人知识库(Wiki)
trae
豆包MarsCode11 天前
从 0 到百万级关注:我用 TraeCode 做了一款大学生求职应用
trae
j7~11 天前
【C++微服务项目开发脚手架】(准备篇)从 0 到跑通:Docker 容器开发环境 + 宿主机用户 + Trae 远程连接 全链路踩坑实战
linux·c++·学习·xshell·docker容器·trae
草帽lufei11 天前
当zf开始全员推广AI,软件供应商的生计没了
ai编程·trae