前端大屏触摸签名实现

参考:

JavaScript实现手写签名,可触屏手写,支持移动端与PC端双端保存_js手写签名-CSDN博客

https://www.cnblogs.com/smileZAZ/p/17219400.html

1.新建一个canvas元素

获取canvas上下文,绘制初始矩形,设置高度宽度,初始绘制位置0,0

// 创建上下文

const ctx = canvas.getContext('2d')

2.监听touchstart事件,调用初始化函数init

取changedTouches列表第0项,changedTouches[0]

获取当前事件的偏移量和坐标,offsetX, offsetY, pageX, pageY,

// 清除以上一次 beginPath 之后的所有路径,进行绘制

ctx.beginPath()

配置线条样式

设置画线起始点位

ctx.moveTo(client.endX, client.endY)

3.监听手势移动touchmove事件,触发draw事件

draw事件,获取当前的坐标点位,

更新最后一次绘制的座标点

client.endX = pageX

client.endY = pageY

// 根据坐标点位移动添加线条

ctx.lineTo(pageX , pageY )

// 绘制

ctx.stroke()

4.监听手势抬起事件touchend,调用结束绘制事件,closeDraw

// 结束绘制

ctx.closePath()

// 移除鼠标移动或手势移动监听器

window.removeEventListener("mousemove", draw)

5.取消按钮。清空画布

    // 取消-清空画布
    const cancel = () => {
        // 清空当前画布上的所有绘制内容
        ctx.clearRect(0, 0, config.width, config.height)
    }

6.保存画布为图片

    const save = () => {
        // 将canvas上的内容转成blob流
        canvas.toBlob(blob => {
            // 获取当前时间并转成字符串,用来当做文件名
            const date = Date.now().toString()
            // 创建一个 a 标签
            const a = document.createElement('a')
            // 设置 a 标签的下载文件名
            a.download = `${date}.png`
            // 设置 a 标签的跳转路径为 文件流地址
            a.href = URL.createObjectURL(blob)
            // 手动触发 a 标签的点击事件
            a.click()
            // 移除 a 标签
            a.remove()
        })
    }

注意:

- event.changedTouches[0]中的坐标都是根据整个页面来的,如果你的canvas不是全屏或者,左上角不和页面左上角一直,pageX,pageY使用时减去canvas元素的坐标位置

  • 5
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
前端大屏适配的代码可以参考以下示例,其中使用了CSS3的媒体查询和百分比布局来实现适配: ```html <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>前端大屏适配示例</title> <style> /* 默认样式 */ * { margin: 0; padding: 0; } /* 大屏幕样式 */ @media screen and (min-width: 1024px) { /* 设置页面宽度为100% */ body { width: 100%; } /* 设置页面主体部分宽度为80% */ .main { width: 80%; margin: 0 auto; } /* 设置页面元素的字体大小为2em */ h1, p { font-size: 2em; } /* 设置图片宽度为50% */ img { width: 50%; } } /* 小屏幕样式 */ @media screen and (max-width: 1023px) { /* 设置页面宽度为100% */ body { width: 100%; } /* 设置页面主体部分宽度为90% */ .main { width: 90%; margin: 0 auto; } /* 设置页面元素的字体大小为1em */ h1, p { font-size: 1em; } /* 设置图片宽度为100% */ img { width: 100%; } } </style> </head> <body> <div class="main"> <h1>前端大屏适配示例</h1> <p>这是一个前端大屏适配的示例,通过使用CSS3的媒体查询和百分比布局来实现。</p> <img src="example.jpg" alt="示例图片"> </div> </body> </html> ``` 在上述代码中,通过设置 @media 查询来实现不同屏幕尺寸下的样式设置。在大屏幕下,设置了页面宽度为100%、页面主体部分宽度为80%、页面元素字体大小为2em、图片宽度为50%等样式。在小屏幕下,设置了页面宽度为100%、页面主体部分宽度为90%、页面元素字体大小为1em、图片宽度为100%等样式。通过这种方式,可以实现前端大屏适配。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值