首页 > 其他分享 >移动端手写签名功能

移动端手写签名功能

时间:2023-04-04 15:11:07浏览次数:41  
标签:function canvas cxt height width 签名 false 手写 移动

移动端手写签名

监听移动端touch事件,在canvas上完成签名绘制,然后将canvas转为base64图片。

以下为代码。

<!DOCTYPE html>
<html lang="zh_CN">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>移动端手写签名</title>
    <style type="text/css">
        html,
        body {
            width: 100%;
            height: 100%;
        }

        #canvas {
            width: 100%;
            height: 100%;
            position: relative;
        }

        #canvas canvas {
            display: block;
        }

        #clearCanvas {
            width: 50%;
            height: 40px;
            line-height: 40px;
            text-align: center;
            position: absolute;
            bottom: 0;
            left: 0;
            border: 1px solid #DEDEDE;
            z-index: 1;
        }

        #saveCanvas {
            width: 50%;
            height: 40px;
            line-height: 40px;
            text-align: center;
            position: absolute;
            bottom: 0;
            right: 0;
            border: 1px solid #DEDEDE;
            z-index: 1;
        }
    </style>
</head>

<body>
    <div id="canvas">
        <button id="clearCanvas">清除</button>
        <button id="saveCanvas">保存</button>
    </div>

    <script type='text/javascript'>
        window.onload = function () {
            new lineCanvas({
                el: document.getElementById("canvas"),//绘制canvas的父级div
                clearEl: document.getElementById("clearCanvas"),//清除按钮
                saveEl: document.getElementById("saveCanvas"),//保存按钮
                //      linewidth:1,//线条粗细,选填
                //      color:"black",//线条颜色,选填
                //      background:"#ffffff"//线条背景,选填
            });
        };
        function lineCanvas(obj) {
            this.linewidth = 1;
            this.color = "#000000";
            this.background = "#ffffff";
            for (var i in obj) {
                this[i] = obj[i];
            };
            this.canvas = document.createElement("canvas");
            this.el.appendChild(this.canvas);
            this.cxt = this.canvas.getContext("2d");
            this.canvas.width = this.el.clientWidth;
            this.canvas.height = this.el.clientHeight;
            this.cxt.fillStyle = this.background;
            this.cxt.fillRect(0, 0, this.canvas.width, this.canvas.width);
            this.cxt.strokeStyle = this.color;
            this.cxt.lineWidth = this.linewidth;
            this.cxt.lineCap = "round";
            //开始绘制
            this.canvas.addEventListener("touchstart", function (e) {
                this.cxt.beginPath();
                this.cxt.moveTo(e.changedTouches[0].pageX, e.changedTouches[0].pageY);
            }.bind(this), false);
            //绘制中
            this.canvas.addEventListener("touchmove", function (e) {
                this.cxt.lineTo(e.changedTouches[0].pageX, e.changedTouches[0].pageY);
                this.cxt.stroke();
            }.bind(this), false);
            //结束绘制
            this.canvas.addEventListener("touchend", function () {
                this.cxt.closePath();
            }.bind(this), false);
            //清除画布
            this.clearEl.addEventListener("click", function () {
                this.cxt.clearRect(0, 0, this.canvas.width, this.canvas.height);
            }.bind(this), false);
            //保存图片,直接转base64
            this.saveEl.addEventListener("click", function () {
                var imgBase64 = this.canvas.toDataURL();
                console.log(imgBase64);
            }.bind(this), false);
        };
    </script>
</body>
</html>

标签:function,canvas,cxt,height,width,签名,false,手写,移动
From: https://www.cnblogs.com/wanglei1900/p/17286473.html

相关文章

  • 浅谈移动端过长文本溢出显示省略号的实现方案
    vivo互联网技术微信公众号 作者:何彦军目前在移动端开发的展示界面中,如果一段文本的数量过长,受限于屏幕的宽高等因素,有可能不能完全显示,这个时候就会把溢出的文本显示成省略号。最近就亲身经历了一系列类似的需求,于是这里做个总结和记录。首先一个最基本的需求就是当文本超过一行......
  • Three.js 进阶之旅:全景漫游-初阶移动相机版
    Three.js进阶之旅:全景漫游-初阶移动相机版 声明:本文涉及图文和模型素材仅用于个人学习、研究和欣赏,请勿二次修改、非法传播、转载、出版、商用、及进行其他获利行为。摘要3D 全景技术可以实现日常生活中的很多功能需求,比如地图的街景全景模式、数字展厅、在线看房、社交......
  • Appium移动端UI自动化介绍
    一.appium基本介绍1.搭建移动端自动化环境,具体搭建环境可以百度a.安装jdk并配置环境变量b.安装安装sdk并配置环境变量c.安装node.jsd.安装appiume.安装夜神模拟器 2.查看被测app包信息 1.冷启动时,windows系统输入adb logcat| findstr START  2.通过aapt命......
  • Appium移动端自动化环境搭建
    一、JDK安装    1.先下载好jdk,下载地址:http://download.oracle.com/otn-pub/java/jdk/8u101-b13/jdk-8u101-windows-x64.exe    2.傻瓜式进行安装    3.配置环境变量     a.先新建JVAV_HOME         b.编辑path   ......
  • Iain McQueen:从移动应用开发中总结出的五个教训
    编者注:本文编译自IainMcQueen发表在Posterous上的博文“WhatILearnedBuildingaMobileFriendlyWebApp”。自今年11月19日发布第一版Swiperoo起,Dave和我就开始时不时谈论开发初期遇到的各种问题。我想,一定也有很多其他移动应用开发者会遇到和我们一样的问题,因此,在这里把......
  • 移动支付服务Dwolla宣布10美元以下交易不收费
    在线移动支付服务Dwolla宣布其交易低于10美元的,一律不收取费用。这对那些小企业和小商家来说无疑是个天大的好消息,当然超过10美元的依然收取0.25美元的费用。该公司曾经试过一段时间,很明显支付的空间从任何角度来看都是成熟的,但不清楚其为什么还要有这么个举动。毕竟,运营的开......
  • 移动互联网时代,群星竞起,Facebook略显“苍白”
    随着移动互联网的迅猛发展,Facebook不得不面对的一个问题就是:它能否击败其他如雨后春笋般不断涌现的后起之秀,将它在互联网领域的辉煌成功移植到移动领域,成为移动社交网络的霸主?庞大的用户群确实是Facebook的巨大优势。Facebook的移动用户超过3.5亿,其中仅iOS应用的每月活跃用户就......
  • 移动机器人
    【问题描述】在N×M的网格中,有一个机器人,它的初始位置为x,y。#左上角为(1,1),右下角为(N,M)。机器人可以接收上/下/左/右移动某个x个单位的指令。如:L5表示向左移动5个单位,R3表示向右移动3个单位,U2表示向上移动2个单位,D4表示向下移动4个单位。移动单位的取值范围在1−9之内。......
  • 移动端适配
    原文链接:https://blog.csdn.net/weixin_39602178/article/details/1260340591.rem方案安装插件npminstallamfe-flexible--savenpminstallpostcss-pxtorem--save-dev在main.js中引入amfe-flexibleimport'amfe-flexible';在postcss.config.js文件中配置postcss-px......
  • vue3适配移动端的登录实现
    <scriptlang="ts"setup>import{ref}from'vue'constPHONE_NUMBER_REGEX=/^1[0-9]{10}$/constVERIFICATION_CODE_REGEX=/^[0-9]{6}$/constLOGIN_ERROR_MESSAGE='登录失败,请检查网络连接并重试'constGENERATE_CODE_ERROR_MESSAGE......