Canvas画布基本功能及实现网页签名功能

canvas 简介

<canvas> 是 HTML5 新增的,一个可以使用脚本(通常为 JavaScript) 在其中绘制图像的 HTML 元素。它可以用来制作照片集或者制作简单(也不是那么简单)的动画,甚至可以进行实时视频处理和渲染。和所有 DOM 元素一样,拥有自己的属性、方法和事件,其中包含绘图的方法。

​它最初由苹果内部使用自己 MacOS X WebKit 推出,供应用程序使用像仪表盘的构件和 Safari 浏览器使用。后来,有人通过 Gecko 内核的浏览器 (尤其是 Mozilla和Firefox),Opera 和 Chrome 和超文本网络应用技术工作组建议为下一代的网络技术使用该元素。

​Canvas 是由 HTML 代码配合高度和宽度属性而定义出的可绘制区域。JavaScript 代码可以访问该区域,类似于其他通用的二维 API,通过一套完整的绘图函数来动态生成图形。通过 JavaScript 脚本可以调用绘图 API 在网页上完成绘图功能。

Canvas 是 HTML5 中最强大的特性之一。允许开发者使用动态和交互的方法,在 Web 上实现桌面应用程序的功能。

​ Mozilla 程序从 Gecko 1.8 (Firefox 1.5) 开始支持 <canvas>, Internet Explorer 从 IE9 开始 <canvas> 。Chrome 和 Opera 9+ 也支持 <canvas>。

Canvas 是 HTML5 新推出的元素标签,用户图形绘制。

canvas基本使用

     Canvas 元素可以在网页中创建一个空白的矩形区域。

  通过 API(JavaScript)可以操作这个区域。

  默认情况下,创建的 Canvas 元素没有边框和内容。

<canvas id="canvasBox" width="" height=""></canvas>
<!--
注解:canvas必须是闭合标签</canvas>不可省,如果省略文档的其他内容将不会显示
只有两个属性width和height如果没用设置宽高默认宽300高150-->

        js文件中:

const canvasBox=document.querySelector("#canvasbox");//获取画布元素
const ctx=canvasBox.getContext(contextType);
/*获取渲染上下文(具备了绘制和处理展示内容的能力)
contextType参数有
2d:绘制2d图像(创建一个CanvasRenderingContext2D对象作为2d渲染的上下文)
webgl(experimental-webgl)、webgl2:绘制3d图像(实验性)
bitmaprenderer:把位图绘制在canvas上下文上(实验性)
*/

        下面是 Canvas 的基本方法:

         获取 Canvas 上下文对象

                 使用 canvas.getContext('2d') 方法可以获取绘图上下文对象,例如:

const canvas = document.getElementById('mycanvas');
const ctx = canvas.getContext('2d');

         绘制形状及填充颜色

                 使用绘图上下文对象的 fillRect()strokeRect() 方法添加矩形,使用 fill()stroke() 填充或者描边形状;使用 fillStylestrokeStyle 属性设置形状内部或外部的颜色,例如:

ctx.fillStyle = 'red';
ctx.fillRect(10, 10, 100, 100);

         绘制图像

                 使用 drawImage() 方法绘制图像,它可以将图片、画布或视频作为图像绘制到画布上,例如:

const img = new Image();
img.onload = function() {ctx.drawImage(img, 0, 0);
}
img.src = 'example.png';

         绘制文本

                 使用 fillText()strokeText() 方法绘制文本,例如:

ctx.font = '20px Arial';
ctx.fillText('Hello World!', 50, 50);

         绘制路径

                 使用 beginPath() 开始路径,然后使用 moveTo() 移动当前点,使用 lineTo()arc()quadraticCurveTo() 创建路径,最后使用 fill()stroke() 方法绘制路径,例如:

ctx.beginPath();
ctx.moveTo(10, 10);
ctx.lineTo(50, 50);
ctx.stroke();

         以上是 Canvas 的基本方法,还有很多高级的方法可以用于绘制复杂图形或动画,这里就不一一说了,具体可以去看看api。

 Canvas示例:实现网页签名功能        

        开发中,偶尔会遇到签名功能,使用 Canvas 可以方便地实现签名功能,以下是一个简单的示例:

 HTML 代码:

<div><canvas id="signatureCanvas" width="300" height="200"></canvas><button onclick="clearSignature()">清除</button><button onclick="saveSignature()">保存</button>
</div>

 JavaScript 代码:

const canvas = document.getElementById('signatureCanvas');
const ctx = canvas.getContext('2d');let isDrawing = false;
let lastX, lastY;// 鼠标按下事件
function handleMouseDown(e) {isDrawing = true;[lastX, lastY] = [e.clientX - canvas.offsetLeft, e.clientY - canvas.offsetTop];
}// 鼠标移动事件
function handleMouseMove(e) {if (!isDrawing) return; // 如果鼠标没有按下,则退出函数const x = e.clientX - canvas.offsetLeft;const y = e.clientY - canvas.offsetTop;ctx.beginPath();ctx.moveTo(lastX, lastY);ctx.lineTo(x, y);ctx.stroke();[lastX, lastY] = [x, y];
}// 鼠标释放事件
function handleMouseUp() {isDrawing = false;
}// 清除签名
function clearSignature() {ctx.clearRect(0, 0, canvas.width, canvas.height);
}// 保存签名
function saveSignature() {const imgData = ctx.getImageData(0, 0, canvas.width, canvas.height);// 将图片数据转换成 base64 格式const base64ImageData = canvas.toDataURL();console.log(base64ImageData);
}// 绑定事件
canvas.addEventListener('mousedown', handleMouseDown);
canvas.addEventListener('mousemove', handleMouseMove);
canvas.addEventListener('mouseup', handleMouseUp);

        一个简单的签名功能就实现了:

上述代码使用 Canvas 绘图 API,监听鼠标按下、移动和释放的事件,并在鼠标移动时绘制签名。同时也提供了清除签名和保存签名功能。其中,ctx.getImageData() 函数可以获取到画布中的图片数据,可以将其转换成 base64 格式,以便于保存。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://xiahunao.cn/news/255135.html

如若内容造成侵权/违法违规/事实不符,请联系瞎胡闹网进行投诉反馈,一经查实,立即删除!

相关文章

chatgpt赋能python:Python中符号怎么输入

Python中符号怎么输入 如果你是一位Python程序员&#xff0c;你肯定会经常使用各种符号&#xff0c;比如冒号、逗号、括号、引号等等。但是有些符号在输入的时候可能会有一些困难&#xff0c;尤其是对于初学者而言。那么在Python中符号怎么输入呢&#xff1f;下面我们来详细介…

chatgpt赋能python:Python中的快捷键:提高编程效率的利器

Python中的快捷键&#xff1a;提高编程效率的利器 作为一名有10年Python编程经验的工程师&#xff0c;我深刻体会到快捷键的重要性。在日常编程中&#xff0c;快捷键可以大大提高编程效率&#xff0c;让我们更快地完成工作。本文将介绍Python中一些常用的快捷键&#xff0c;并…

开源SCRM营销平台MarketGo-账号管理

一、概述 企业在经营的过程中&#xff0c;因为业务、税收等各种因素的需要在各地成立分公司&#xff0c;这样针对公司来说管理成本&#xff0c;运营成本&#xff0c;营销成本都会提高&#xff0c;并且沟通的效率也会变低。 在用户营销的场景中&#xff0c;MarketGo在SCRM做了…

微信去除 防欺诈盗号请勿支付或输入qq密码 以及 防欺诈或盗号请不要输入qq密码 的方法...

本文介绍如何去除微信顶部的“防欺诈盗号,请勿支付或输入qq密码”。或 “防欺诈或盗号&#xff0c;请不要输入qq密码”如图所示。 一、微信认证 目前只有已经通过微信认证的账号可以去除这个提示。在公众账号下左侧列表中找到微信认证&#xff0c;按照提示申请认证即可。 二、设…

linux echo命令_如何在Linux上使用Echo命令

linux echo命令 Fatmawati Achmad Zaenuri/Shutterstock Fatmawati Achmad Zaenuri / Shutterstock The echo command is perfect for writing formatted text to the terminal window. And it doesn’t have to be static text. It can include shell variables, filenames, a…

黑客帝国:梦中没有错与对 梦中有安也有危

&#xff08;1&#xff09;梦 窦唯曾经说过一句话&#xff1a;现实中实现不了的&#xff0c;让梦去实现吧。 1899年&#xff0c;一位精神科医生出版了一本书&#xff1a;梦的解析。 关于梦、关于精神&#xff0c;我最喜欢看老李子的两部电影&#xff1a;一部是关于梦的《盗梦空…

京东云宙斯上传单张图片php,PHP图片上传程序(单张)

/****************************************************************************** 参数说明: $max_file_size : 上传文件大小限制, 单位BYTE $destination_folder : 上传文件路径 $watermark : 是否附加水印(1为加水印,其他为不加水印); 使用说明: 1. 将PHP.INI文件里面的&q…

京东平台开发者入驻指南

一、 成为开发者 使用京东商家开放平台服务首先需要成为开放平台开发者。打开open.jd.com&#xff0c;使用京东账号登录 点击控制中心&#xff0c;提交开发者信息完成入驻 按要求完成信息提交后&#xff0c;通过审核即可成为开发者 二、 创建和管理应用 开发者首先需要…

监控神器:Prometheus 轻松入门,真香!

点击关注公众号&#xff0c;实用技术文章及时了解 导语 &#xff1a;Prometheus是一个开源的完整监控解决方案&#xff0c;本文将从指标抓取到查询及可视化展示&#xff0c;以及最后的监控告警&#xff0c;对Prometheus做一个基本的认识。 一、简介 Prometheus是古希腊神话里泰…

底层节点到节点上层是端到端_nEqual发布全新一代CDP平台宙斯版,解构企业营销数字化的底层逻辑...

企业数字化的浪潮已经向前奔涌了几年之久&#xff0c;随着包括消费者在内的外部环境和节奏已经全面数字化&#xff0c;企业数字化几乎是一个必行之举。到了今年&#xff0c;成熟的环境和疫情的到来使得行业中绝大多数从业者&#xff0c;都看见了实施数字化后的增长势能。 加之不…

记录对接京东宙斯API -- 同步订单信息到自身系统

记录对接京东宙斯API -- 同步订单信息到自身系统 目录1. 需求2. 准备工作一: 查看官方文档3. 准备工作二: 申请京东云鼎并入驻4. 创建一个新的项目并部署到云鼎.5. 调用订单API代码.6. JdService 目录 1. 需求 根据产品大大的需求描述&#xff1a; 对客户的京东旗舰店里的订…

php对接京东宙斯平台,利用京东联盟API获取自定义推广链接

本文将简单介绍下京东联盟、京东宙斯两个平台,以及如何利用京东宙斯平台的京东联盟API来快速获取自定义推广链接。 关于京东联盟 京东联盟(去官网看看)是一个CPS模式的营销平台,我们可以使用自己的网站放置联盟的推广链接为京东推销产品,当用户在我们的网站上点击了某个推广…

SpringBoot框架总结

一、SpringBoot框架的概念 1、传统框架的弊端 例如传统的SSM框架整合了MyBatis、Spring、SpringMVC框架&#xff0c;但其需要繁琐且重复的配置使程序员很是痛苦 2、SpringBoot框架 SpringBoot框架在传统框架的基础上对其进一步封装&#xff0c;只需要一些简单的配置&#x…

chatgpt赋能python:Python中最大公约数计算

Python中最大公约数计算 在Python编程中&#xff0c;求最大公约数是一个非常常见的需求。最大公约数一般简称为gcd&#xff0c;其定义为两个或多个整数的最大公因数。 在本篇文章中&#xff0c;我们将介绍Python中最常用的两种计算gcd的方法&#xff0c;并深入讲解它们的实现…

M7650DNF 打印机 word打印时候提示手动进纸的解决方法

两个地方需要设置&#xff0c;光一个地方设置不够&#xff1a;

东芝2323AM复印机双面打印设置方法

东芝DP-2323AM打印机&#xff0c;想要进行双面打印&#xff0c;到底应该如何设置呢&#xff1f;自动双面的话又该如何操作呢&#xff1f;这样就可以很好的解放双手了。 首先我们需要安装好完整的复印机驱动及应用程序 1、点击屏幕左下角的“开始”菜单&#xff0c;选择“打印机…

wps计算机打印双面输出,WPS轻松办公—-文档双面打印的两种方法

大家好&#xff0c;我们在利用&#xff0c;WPS文字&#xff0c;进行日常办公室经常需要运用到双面打印的功能&#xff0c;但是有些打印机不支持双面打印&#xff0c;需要手动进行双面打印&#xff0c;有的需要打印部分文档&#xff0c;有的需要打印全部文档&#xff0c;那么这两…

M7206手动进行双面打印步骤

一般以PDF文件格式打印&#xff08;若为word文件&#xff0c;则先另存为PDF&#xff0c;并检查排版等细节问题&#xff0c;再行打印&#xff09; 第一遍&#xff0c;打印正面&#xff1a; 打开文档&#xff0c;点击“打印”进入打印预览。“选择打印机”确认打印机是否已正常…

标签打印软件如何输出双面打印的文档

现在印刷行业使用的设备越来越先进&#xff0c;其中打印彩色功能、打印奇/偶数页已经是比较常见的设置&#xff0c;而且现在一些专业的打印设备支持打印双面的文档&#xff0c;那么我们在制作标签文件时&#xff0c;如何输出双面打印的文档呢&#xff0c;下面就来详细看一下&am…

设置手动双面打印_双面打印文档,你会吗?学会这几招,自动双面打印问题轻松解决...

在办公中打印耗材是非常昂贵的&#xff0c;所以为了尽量节省纸张&#xff0c;我们往往会将一张纸正面和反面都用上(双面打印)。毕竟支持自动双面打印的打印机很少&#xff0c;大多数情况下的打印机都是不支持双面打印的&#xff0c;这个时候我们就必须来手动设置双面打印了。 0…