js + canvas 实现签字板功能(签名支持下载到本地)_☆往事随風☆的博客


欢迎访问我的个人博客:https://wk-blog.vip

一、前言

使用 js + canvas 制作一个简易的签字板,支持签名下载到本地。类似于我们平常在网上签字的效果。

二、效果展示

在这里插入图片描述


点击在线试用(pc端)

三、设计思路

  • 签字功能
    主要是利用了canvas中的绘制功能,为了能够实现绘制,我们需要获取到鼠标的按下时的坐标和移动偏移量。前者是绘制的起点,后者是绘制的线条。
  • 下载功能
    首先创建一个 a 标签,然后将canvas转化为链接赋值给 a 标签的 href 属性,为 a 标签设置download属性,最后调用click()方法即可完成下载

四、代码示例

1.html代码示例

<canvas id="test" width="600" height="600">
        <span>您的浏览器不支持canvas属性</span>
    </canvas>

2.css代码示例

        html {
            background-color: black;
        }

        /* 设置画布样式 */
        #test {
            position: absolute;
            left: 0;
            right: 0;
            top: 0;
            bottom: 0;
            margin: auto;
            background-color: #fff;
        }

        .title {
            width: 200px;
            margin: 0 auto;
            color: orangered;
            text-align: center;
            padding: 0.5rem 0;
            font-weight: 600;
            background: #fff;
        }

3.js代码示例

 window.onload = function(){
            // 获取画布
            var test = document.getElementById("test");
            // 检验支持性
            if(test.getContext){
                // 获取画笔
                var ctx = test.getContext("2d");
            }
            // 为画布绑定鼠标按下事件
            test.onmousedown = function(event){
                // 设置事件兼容
                event = event || window.event;
                //获取鼠标偏移量
                var X = event.clientX - test.offsetLeft;
                var Y = event.clientY - test.offsetTop;
                // 清空路径容器
                ctx.beginPath();
                // 画笔抬起
                ctx.moveTo(X,Y);
                // 绑定鼠标移动事件
                document.onmousemove = function(event){
                    event = event || window.event;
                    // 获取鼠标移动偏移量
                    var proX = event.clientX - test.offsetLeft;
                    var proY = event.clientY - test.offsetTop;
                    // 压栈
                    ctx.save();
                    // 设置样式
                    ctx.strokeStyle = "skyblue";
                    // 划线
                    ctx.lineTo(proX,proY);
                    ctx.stroke();
                    ctx.restore();
                };
                // 为画布绑定鼠标抬起事件
                document.onmouseup = function(event){
                    event = event || window.event;
                    // 取消鼠标移动事件
                    document.onmousemove = null;
                    // 取消鼠标抬起事件
                    document.onmouseup = null;
                };
                // 设置下载
                test.addEventListener('dblclick',() => {
                    let link = document.createElement('a');
                    link.href = test.toDataURL('image/png');
                    link.download = "sign.png";
                    link.click();
                },)
                return false;
            };
        };
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

☆*往事随風*☆

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值