是 HTML5新增的元素,可用于通过使用JavaScript中的脚本来绘制图形。例如,它可以用于绘制图形,制作照片,创建动画,甚至可以进行实时视频处理或渲染。

思路:

尝试在画布上先用鼠标画点,获取鼠标点击时的x,y坐标,添加给“点”

将点连成线,即鼠标移动时打点(点成线原理)。这里我们需要的是鼠标按下,移动打点,松开停止(3个事件,但是只需要一个状态,就是鼠标移动事件在鼠标点击事件后,且鼠标松开时停止)缺点:不能连续打点,移动过快时断点

document.οnmοusedοwn=function(){} //鼠标点击事件

document.οnmοusemοve=function(){} //鼠标移动事件

document.οnmοuseup=function(){} //鼠标松开事件

这时,就需要用到HTML5新标签

var canvas = document.getElementById('canvas');

var ctx = canvas.getContext('2d'); //获取上下文在“2d”平面内

//这里必须现有颜色,再有图形

ctx.fillStyle = 'xxx'; //填充颜色

ctx.fillRect(x1, y1, x2, y2); //画正方形x1,y1左上角坐标x2,y2右下角坐标

ctx.strokeReact(x,y,w,h); //描边

注:不要使用CSS控制初始宽高(等比例缩放)

除了可以直接画正方形外,还可以画是三角形:

ctx.beginPath(); //开始

ctx.moveTo(x,y); //从哪开始

ctx.lineTo(x,y); //第一条线

ctx.lineTo(x,y); //第二条线

ctx.fill(); //闭合

画线需要在线终点加上:

ctx.beginPath(); //开始

ctx.moveTo(x,y); //从哪开始

ctx.lineTo(x,y); //线

ctx.stroke();//描边 画线必须加

ctx.closePath(); //结束

ctx.linewidth='xx';//更改线宽

画圆:

ctx.beginPath(); //开始

ctx.arc(圆心x,圆心y,半径r,起点,终点);//Math.PI 与π相关,此时顺时针

ctx.fill();//填充 ctx.stroke();//描边

此时,就可以使用标签完成画板的制作。

创建画线函数,将第一点(mousedown)与第二点(mousemove)连线,第三点(mousemove)连线,最后与(mouseup)连线。

定义变量用来记录第一点坐标,第二点坐标并更新。

canvas.οnmοusedοwn=function(aaa){

var x=aaa.clientX;

var y=aaa.clientY;

using=true; //判断是否正在画画

if(eraserOn){

hua.clearRect(x-5,y-5,30,30);//这个是给“hua”加的动作,并且不带px单位

}else{

star={x:x,y:y};

dian(x,y,r);

}

};

//鼠标移动事件

canvas.οnmοusemοve=function(aaa){

if(using){

var x=aaa.clientX;

var y=aaa.clientY;

var newStar={x:x,y:y}; //新点坐标

if (eraserOn){

hua.clearRect(x-5,y-5,30,30);

}else{

line(star.x,star.y,newStar.x,newStar.y); //定义的线函数

dian(x,y,r); // 定义的点函数

star=newStar;//将新点覆盖旧点

}

}

};

//鼠标松开事件

canvas.οnmοuseup=function(aaa){

using=false;

};

//点的函数

function dian(x,y,r){

hua.beginPath();

hua.arc(x,y,r,0,Math.PI*2);

hua.fill();

}

//线的函数

function line(x1,y1,x2,y2){

hua.beginPath();

hua.moveTo(x1,y1);

hua.lineWidth=lw; //线宽

hua.lineTo(x2,y2);

hua.stroke();//先必须用stroke,不能用fill

hua.closePath();

}

此时,就可以实现更改画笔粗细(线宽),更改画笔颜色(填充颜色),橡皮擦功能(画笔颜色为透明),清屏(画布覆盖)和保存(a标签)功能。

//点击清屏事件

var delObj=document.getElementById("del");

delObj.οnclick=function(){

hua.clearRect(0,0,canvas.width,canvas.height);

};

/************************************************************************/

//点击保存

var saveObj=document.getElementById("save");

saveObj.οnclick=function () {

var hf=canvas.toDataURL("image/png");

//使用a标签的下载功能

var a=document.createElement("a");

document.body.appendChild(a);

a.href=hf;

a.download="我的作画";

a.target="_blank";

a.click();

};

兼容移动端

重点:在移动端页面必须添加的 meta:vp + Tab

监听手指触摸移动事件:

xxx.ontouchstart=function(){}; //触摸

xxx.ontouchmove=function(){}; //移动

xxx.ontouchend=function(){}; //结束

使用特性检测判断当前设备是否支持触屏(还可以使用媒体查询)

触屏设备 xxx.ontouchstart ==> null

非触屏设备 xxx.ontouchstart ==> undefined

或者使用 “in” 操作符判断某某属性是否存在

遇到的问题与解决方法

画板宽高问题

//给画板全屏模式

var pageWidth=document.documentElement.clientWidth;

var pageHeight=document.documentElement.clientHeight;

canvas.width=pageWidth;

canvas.height=pageHeight;

注意:由于行内块级元素的特性,此时会出现滚动条,需要更改 的对其方式:vertical-align:top;

移动端出现滚动条

通过给 添加固定定位

其中鼠标点击事件的 clientX/Y 是相对于整个文档(视口),并不是画布

通过问题1可以解决该问题,即使 全屏

html5画板的使用方法,使用canvas实现画板相关推荐

  1. html5画板的使用方法和功能,canvas实现的画板功能

    闲来无事正好团队准备做一个画板相关的项目,虽然我不在其中但是对这个画板还是蛮有兴趣的. 主要是通过canvas这个标签加上鼠标的一些相关事件来实现的. 中间有碰到过一个bug canvas的画板大小不 ...

  2. html5 电子白板 直播,HTML5 canvas 做画板画图 可以做电子白板

    HTML5 canvas 做画板画图 可以做电子白板 HTML5 canvas 做画板画图 可以做电子白板 var canvas; var context; var tool; /** * calle ...

  3. HTML5 canvas 做画板画图 可以做电子白板

    HTML5 canvas 做画板画图 可以做电子白板 <html><head><meta charset="utf-8"><title&g ...

  4. HTML5 使用canvas实现画板功能(画笔颜色切换、粗细调整、清除图像)

    标签定义图形,比如图表和其他图像,您必须使用脚本来绘制图形. 在画布上(Canvas)画一个红色矩形,渐变矩形,彩色矩形,和一些彩色的文字. HTML5 元素用于图形的绘制,通过脚本 (通常是Java ...

  5. html5 drawimage参数,小程序中canvas的drawImage方法参数详解

    最近在开发小程序,海报生成的过程中,要在carvas中不断去添加图片,对小程序的drawImage参数不是很明确,这次解惑. 示例代码 有三个版本的写法: drawImage(imageResourc ...

  6. 用html5做一个简单的作品,html5 canvas 简单画板实现代码

    canvas简单画板 canvas简单画板 提示:您可以先修改部分代码再运行

  7. html5 canvas 画板 demo,html5 canvas 简单画板实现代码

    canvas简单画板 #can{ width:600px; height:500px; border:1px solid #ccc; margin-top:0px; margin-left:20px; ...

  8. 巧用canvas实现画板功能,使用画笔在图片上涂画,橡皮擦可擦除涂画,并保存

    canvas 是HTML5的元素,使用JavaScript 在网页上绘制图像. canvas 拥有多种绘制路径.矩形.圆形.字符以及添加图像的方法. 而如果想实现画笔在画板涂画画笔在图片上涂画,橡皮擦 ...

  9. 基于HTML5的数据可视化方法有哪些

      现在在大数据的带领下,数据可视化越来越突出,能够清楚的分析出自己想要的数据,这也是我们现在最求的数据可视化方法,那么实现HTML5的数据可视化方法有哪些?这都是我们值得研究的东西,数据可以给我们带 ...

最新文章

  1. Linux下打造仿Mac系统桌面
  2. mysql order 关键字_PHP数据库MySQL Order By 关键词 - PHP教程
  3. Xcode搭建真机调试环境 图文实例
  4. E. Beautiful Subarrays(思维 01 trie 树)
  5. jQuery事件整合
  6. 【文章】一副对联,便写尽了人生
  7. (01)JVM-内存三大核心区域以及分析
  8. Tomcat设置监听端口80、配置虚拟主机、安装zrlog博客、日志文件
  9. 批量插入数据到sqlserver
  10. sql row_number() over() 来自动产生行号
  11. 佳能ts9020墨盒不识别_佳能打印机哪一款性价比高 佳能打印机型号推荐【详解】...
  12. 论文参考文献格式及意义
  13. 暨南大学计算机系录取分数线,暨南大学2017年在广东省各专业录取分数线
  14. Windows数字签名 数字签名(代码签名)流程
  15. AR算法原理在计算机视觉中的应用
  16. 逆水寒 各个服务器位置,2019年3月28日首个“超级大服”服务器合并命名结果公告...
  17. 微信公众号 微信连wifi最全的教程
  18. 关于寒武纪的前世今生与未来
  19. MinGW编译log4cpp
  20. docker 传递 profile

热门文章

  1. 域格9x07模块问题日志抓取方法
  2. 无代码表格数据库——一个企业数字化新物种
  3. Python爬取安居客房产经纪人信息
  4. 手把手教你搭建Bert文本分类模型,快点看过来吧!
  5. d3.js zoom 事件
  6. ICDAR2013文本检测算法的衡量方法(二)Rectangle Matching与DetEval
  7. 梆梆安全亮相网络安全博览会 矢志保护智能生活
  8. 银河麒麟V10系统常见问题一(应用商店)
  9. 低代码学习教程:生成固定格式流水号
  10. Spring事务与事务传播机制