用html5的canvas和JavaScript创建一个绘图程序

boyanx4个月前技术教程22

本文将引导你使用canvas和JavaScript创建一个简单的绘图程序。

首先准备容器Canvas元素,接下来所有的事情都会在JavaScript里面。

1 <canvas id="canvasInAPerfectWorld" width="490" height="220"></canvas>

获取绘图环境,context对象提供了用于在画布上绘图的方法和属性

1 context = document.getElementById('canvasInAPerfectWorld').getContext("2d");

开始绘图过程

首先我们需要存储绘图路径点坐标,addClick函数添加坐标点值到数组

var clickX = new Array;
var clickY = new Array;
var clickDrag = new Array;//存储路径点
var paint;//是否绘制,mousedown时置为true
function addClick(x, y, dragging)
{
  clickX.push(x);
  clickY.push(y);
  clickDrag.push(dragging);
}

redraw函数每次调用整个canvas就会重新绘制一次。首先我们清空画布上内容,设置绘制线条颜色粗细线条连接方式。然后

两点之间绘制一段路径,将数组中的坐标点一次绘制出来

 1 function redraw{
 2   context.clearRect(0, 0, context.canvas.width,   context.canvas.height); // 清除画布内容
 3   
 4   context.strokeStyle = "#df4b26";//设置线条颜色
 5   context.lineJoin = "round";//当两条线条交汇时,创建圆形边角
 6   context.lineWidth = 5;//线条粗细
 7 
 8   for(var i=0; i < clickX.length; i++) {        
 9     context.beginPath;//开始一条路径,或重置当前的路径
10     if(clickDrag[i] && i){
11       context.moveTo(clickX[i-1], clickY[i-1]);
12      }else{
13        context.moveTo(clickX[i]-1, clickY[i]);
14      }
15      context.lineTo(clickX[i], clickY[i]);
16      context.closePath;
17      context.stroke;//绘制路径
18   }
19 }

绘制过程需要的事件

1 mousedown事件

绘图这点击到画布上时,将触发该事件执行。调用了addClick函数,并将paint置为true。

1 $('#canvas').mousedown(function(e){
2   var mouseX = e.pageX - this.offsetLeft;
3   var mouseY = e.pageY - this.offsetTop;
5   paint = true;
6   addClick(e.pageX - this.offsetLeft, e.pageY - this.offsetTop);
7   redraw;
8 });

2 mousemove事件

mousedown中设置的paint为true后,鼠标移动时触发mousemove事件执行,将鼠标移动的所有点记录下来,并不断调用redraw重绘画布。

1 $('#canvas').mousemove(function(e){
2   if(paint){
3     addClick(e.pageX - this.offsetLeft, e.pageY - this.offsetTop, true);
4     redraw;
5   }
6 });

3 mouseup事件

mouseup鼠标点击后松开或者拖拽后松开,表示绘制完成该路径,将paint置为false。

1 $('#canvas').mouseup(function(e){
2   paint = false;
3 });

4 mouseleave事件

mouseleave鼠标离开canvas元素,将paint置为false。

1 $('#canvas').mouseleave(function(e){
2   paint = false;
3 });
标签: html转canvas

相关文章

电子病历编辑器开发之路:Canvas vs DOM 的深度剖析与技术抉择

在医疗信息化飞速发展的今天,电子病历(EMR)编辑器作为医疗系统的核心组件,其性能与功能的优劣直接关乎医疗工作的效率与数据安全。近期,我在研读一篇关于 EMR 电子病历编辑器推广的文章时,其中对基于...

canvas是什么?前端中canvas 性能为何会比 html/css 好?

更底层的操作 (Direct Pixel Manipulation):Canvas 本质上是一个位图画布。开发者通过 JavaScript API(如 fillRect, drawImage, arc...

网页游戏开发基础——Canvas基本图形绘制

  什么是Canvas?Canvas是HTML5新增的一个标签,你可以把它翻译为画布,通过它可以绘制二维或三维图形,有了它就可以不用安装flash而实现复杂的动画功能。如何通过Canvas绘图?下面我...

使用canvas实现简单的贪吃蛇游戏,html+css+js

一.话不多,先瞅效果:又在别的地方嫖到了这个效果研究了亿下下,制作过程如下(超详细):二.实现过程(源码在最后):1.定义canvas标签: <canvas id="canvas"...

Canvas 从入门到劝朋友放弃(图解版)

本文简介点赞 + 关注 + 收藏 = 学会了在前端领域,如果只是懂 Vue 或者 React ,未来在职场的竞争力可能会比较弱。根据我多年在家待业经验来看,前端未来在 数据可视化 和 AI 这两个领域...

一个解决支持HTML/CSS/JS网页转PDF(高质量)的终极解决方案

(坑给你踩完,可行的结果给你探明,让你的方向明确,存在的小问题自行解决)1、不要考虑前端转pdf了,我已经帮您爬过坑了。前端转PDF,本质就是把网页通过canvas转成图片,图片转成PDF。坑1:PD...

发表评论    

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。