iis服务器助手广告广告
返回顶部
首页 > 资讯 > 前端开发 > JavaScript >JS前端使用canvas编写一个签名板
  • 856
分享到

JS前端使用canvas编写一个签名板

JScanvas签名板JScanvas 2022-11-13 13:11:25 856人浏览 八月长安
摘要

目录需求方案分析canvas涉及知识点代码以上代码,未开发的点需求 需求是做不完了,福利也被砍了,旅游也泡汤了,手上有2个需求,还没做完,PM就来新需求了。 开发一个签名板:要求PC

需求

需求是做不完了,福利也被砍了,旅游也泡汤了,手上有2个需求,还没做完,PM就来新需求了。

开发一个签名板:要求PC端/移动端都能用、扫码签名、实时同步、可以改变笔画粗细、笔画颜色、可以生成base64图片。

方案分析canvas

1.获取页面[canvas]元素,设置宽高(800*200)

2.通过**htmlCanvasElement.getContext()**  方法返回[canvas] 的上下文ctx

3.初始化ctx基础属性

  • 线条颜色
  • 线条宽度
  • 线条末端形状

4.开始绘画

  • 监听鼠标事件
  • 绘制起点、终点

5.生成一个移动端链接二维码

6.在移动端签名时,通过websocket,实时传递数据给PC端。

涉及知识点

Canvas涉及特性:

  • 基本属性

getContext()

strokeStyle

fillStyle

lineCap

lineJoin

  • 路径绘制

beginPath()

lineTo()

moveTo()

  • 其他方法(生成base64,清除画板)

toDataURL()

clearRect()

涉及鼠标事件:

mousemove

mousedown

mouseup

mouseout

涉及移动端触摸事件:

touchstart

touchend

touchmove

代码

<!DOCTYPE html>
<html lang="en">
<head>
	<meta charset="UTF-8">
        <meta name="viewport" content="width=device-width, initial-scale=1">
	<title>canvas-sign</title>
	<style>
		html,
		body {
			margin: 0;
		}
		.container {
			width: calc(100vw - 40px);
			height: calc(100vh - 40px);
			padding: 20px;
		}
		.canvas-body {
			width: calc(80vw);
			height: calc(80vh);
			margin: 20px auto;
		}
		#sign {
			background-color: #f3f5f7;
			border-radius: 4px;
			border: 1px dashed #0F6BFF;
		}
		#img {
			margin: 20px;
			border-radius: 4px;
			background-color: #f3f5f7;
			display: none;
		}
		#img.show {
			display: inline-block;
		}
		.btns {
			width: calc(80vw - 40px);
			text-align: right;
			margin: 0 auto;
		}
		@media screen and (orientation: portrait) {
			.qrcode {
				display: none;
			}
		}
	</style>
	<script type="text/javascript" src="https://static.runoob.com/assets/qrcode/qrcode.min.js"></script>
</head>
<body>
	<div class="container">
		<div id="canvas-body" class="canvas-body">
			<canvas id="sign" style="width: 100%; height: 100%;"></canvas>
			<div class="qrcode">
				扫码签名
				<div id="qrcode"></div>
			</div>
		</div>
		<div class="btns">
			<button id="reset">重置</button>
			<button id="showImg">生成图片</button>
		</div>
	</div>
	<div id="img">
	</div>
	<script>
		let canvasBody = document.getElementById('canvas-body');
		let canvas = document.getElementById('sign');
		let reset = document.getElementById('reset');
		let showImg = document.getElementById('showImg');
		let img = document.getElementById('img');
		canvas.width = canvasBody.clientWidth;
		canvas.height = canvasBody.clientHeight;
		let ctx = canvas.getContext('2d');
		ctx.lineWidth = 10;
		ctx.strokeStyle = '#333';
		ctx.lineCap = 'round';
		ctx.lineJoin = 'round';
		let isDrawing = false;
		let dataURL = '';
		let initX;
		let initY;
		// 事件监听
		canvas.addEventListener('mousedown', (e) => {
			isDrawing = true;
			initX = e.offsetX;
			initY = e.offsetY
		});
		canvas.addEventListener('mousemove', draw);
		canvas.addEventListener('mouseup', () => isDrawing = false);
		canvas.addEventListener('mouseout', () => isDrawing = false);
		// 绘制
		function draw(e) {
			if (!isDrawing) return
			ctx.beginPath();
			// 起点
			ctx.moveTo(initX, initY);
			// 终点
			ctx.lineTo(e.offsetX, e.offsetY);
			ctx.stroke();
			initX = e.offsetX;
			initY = e.offsetY
		}
		function clear() {
			ctx.clearRect(0, 0, canvas.width, canvas.height);
			if (dataURL) {
				dataURL = '';
				img.innerHTML = '';
				img.classList.remove('show');
			}
		}
		function canvasToBase64() {
			dataURL = canvas.toDataURL();
			// let oGrayImg = new Image();
			// oGrayImg.src = dataURL;
			// img.classList.add('show');
			// img.appendChild(oGrayImg)
			alert(`${dataURL}`)
		}
		reset.addEventListener('click', clear);
		showImg.addEventListener('click', canvasToBase64);
	</script>
	<script>
		let qrcode = new QRCode(document.getElementById('qrcode'), {
			width: 96,
			height: 96
		})
		qrcode.makeCode('Https://canvas-sign.vercel.app/');
	</script>
</body>
</html>

以上代码,未开发的点

  • 移动端触摸事件,禁止移动端屏幕,修改笔画粗细、笔画颜色
  • 实时同步WEBSocket
  • 实时同步笔画时,如何让笔画有实时同步一笔一画的效果?下图

以上就是JS前端使用canvas编写一个签名板的详细内容,更多关于JS canvas签名板的资料请关注编程网其它相关文章!

--结束END--

本文标题: JS前端使用canvas编写一个签名板

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

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

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

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

下载Word文档
猜你喜欢
  • JS前端使用canvas编写一个签名板
    目录需求方案分析canvas涉及知识点代码以上代码,未开发的点需求 需求是做不完了,福利也被砍了,旅游也泡汤了,手上有2个需求,还没做完,PM就来新需求了。 开发一个签名板:要求PC...
    99+
    2022-11-13
    JS canvas签名板 JS canvas
  • JS前端使用canvas搞一个手势识别
    目录前言具体步骤第一步:手势绘制第二步:重新取样第二步:平移第三步:旋转第四步:缩放第五步:手势录入第六步:比较(重点)注意事项比较的基本套路(可跳过)关于多笔画(可跳过)小结前言 ...
    99+
    2022-11-13
    JS前端canvas手势识别 canvas手势识别
  • 使用canvas怎么实现一个手写签名效果
    这期内容当中小编将会给大家带来有关使用canvas怎么实现一个手写签名效果,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。HTML代码:<!--手写区-->   &...
    99+
    2023-06-09
  • 怎么在html5中使用canvas手写签名
    怎么在html5中使用canvas手写签名?很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。window.onload = function()...
    99+
    2023-06-09
  • 使用canvas怎么实现一个在线签名功能
    这期内容当中小编将会给大家带来有关使用canvas怎么实现一个在线签名功能,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。什么是 Canvas?Canvas 是 HTML5 新增的元素,用于在网页上绘制图形...
    99+
    2023-06-09
  • 如何使用js编写留言板
    这篇文章主要介绍了如何使用js编写留言板,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。具体内容如下<!DOCTYPE htm...
    99+
    2024-04-02
  • 怎么在JavaScript中使用canvas实现一个画板和签字板功能
    怎么在JavaScript中使用canvas实现一个画板和签字板功能?针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。<!DOCTYPE html><...
    99+
    2023-06-06
  • 使用JavaScript编写一个随机点名器
    这篇文章给大家介绍使用JavaScript编写一个随机点名器,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。JavaScript可以做什么1.可以使网页具有交互性,例如响应用户点击,给用户提供更好的体验。2.可以处理表单...
    99+
    2023-06-06
  • JS前端使用canvas实现物体的点选示例
    目录前言hover 的实现click 的实现矩形的坐标哪来的点在多边形内的其他判断方法穿透本章小结前言 上个章节中我们已经给物体加上了被选中的效果,现在可以上点交互了,这个章节主要实...
    99+
    2022-11-13
    JS前端canvas物体点选 canvas物体点选
  • Vue怎么使用sign-canvas实现在线手写签名
    这篇文章主要讲解了“Vue怎么使用sign-canvas实现在线手写签名”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Vue怎么使用sign-canvas实现在线手写签名”吧!效果图:sig...
    99+
    2023-06-30
  • 利用java编写一个留言板功能
    本篇文章为大家展示了利用java编写一个留言板功能,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。JSP+JavaBean的留言板技术<span >Messages.html <HT...
    99+
    2023-05-31
    java 留言板 ava
  • 使用canvas怎么实现一个像素画板
    本篇文章给大家分享的是有关使用canvas怎么实现一个像素画板,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。Pixel = function (o...
    99+
    2023-06-09
  • 使用ElementUI写一个前端分页查询的实例
    目录前言前端分页查询写在最后前言 一般我们在做项目的时候,都是通过调用后台接口去做增删改查,但是也有例外,有些某些特定场景下,会让前端去做好增删改查. 那么我们今天就来做一下这个需求...
    99+
    2024-04-02
  • 如何使用js写一个js解释器
    这篇文章主要介绍了如何使用js写一个js解释器,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。先来看一下效果一个最简单的解释器上面有提到,js...
    99+
    2024-04-02
  • JS前端使用Canvas快速实现手势解锁特效
    目录前言Demo需要实现的功能初始化数据和页面渲染touchstart 手指开始触摸事件touchmove 监听手指滑动事件touchend 监听手指触摸结束事件页面滚动处理连接的两...
    99+
    2024-04-02
  • Vue使用sign-canvas实现在线手写签名的实例
    目录更新日志安装全局方式局部方式效果图: sign-canvas 一个基于 canvas 开发,封装于 Vue 组件的通用手写签名板(电子签名板),支持 pc 端和移动端。 更新...
    99+
    2024-04-02
  • 前端开发中11个JS使用技巧
    这篇“前端开发中11个JS使用技巧”文章,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要参考一下,对于“前端开发中11个JS使用技巧”,小编整理了以下知识点,请大家跟着小编的步伐一步一步的慢慢理解,接下来就让我们进入...
    99+
    2023-06-06
  • 如何使用Canvas写一个贪吃蛇游戏
    这篇文章主要介绍了如何使用Canvas写一个贪吃蛇游戏,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。之前在慕课网看了几集Canvas的视频,一直想着写点东西练练手。感觉贪吃蛇...
    99+
    2023-06-09
  • JS前端使用canvas动态绘制函数曲线示例详解
    目录前言第一步:绘制坐标系1、如何确定 x 轴和 y 轴的边界值2、不是传入多少网格数就是多少网格3、如何让坐标原点位于画布中心4、刻度总是会有浮点数第二步:画函数曲线第三步:绘制辅...
    99+
    2022-11-13
    JS canvas绘制函数曲线 JS canvas
  • JS前端使用canvas实现扩展物体类和事件派发
    目录前言FabricImage 图片类事件派发小结前言 虽然我们讲了这么多个章节,但其实目前为止就只有一个 Rect 类能用,略显单调。于是乎,为了让整个画布稍微生动一些,这个章节我...
    99+
    2022-11-13
    canvas扩展物体类事件派发 前端canvas扩展物体类
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作