html5画板的使用方法,使用canvas实现画板
是 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实现画板相关推荐
- html5画板的使用方法和功能,canvas实现的画板功能
闲来无事正好团队准备做一个画板相关的项目,虽然我不在其中但是对这个画板还是蛮有兴趣的. 主要是通过canvas这个标签加上鼠标的一些相关事件来实现的. 中间有碰到过一个bug canvas的画板大小不 ...
- html5 电子白板 直播,HTML5 canvas 做画板画图 可以做电子白板
HTML5 canvas 做画板画图 可以做电子白板 HTML5 canvas 做画板画图 可以做电子白板 var canvas; var context; var tool; /** * calle ...
- HTML5 canvas 做画板画图 可以做电子白板
HTML5 canvas 做画板画图 可以做电子白板 <html><head><meta charset="utf-8"><title&g ...
- HTML5 使用canvas实现画板功能(画笔颜色切换、粗细调整、清除图像)
标签定义图形,比如图表和其他图像,您必须使用脚本来绘制图形. 在画布上(Canvas)画一个红色矩形,渐变矩形,彩色矩形,和一些彩色的文字. HTML5 元素用于图形的绘制,通过脚本 (通常是Java ...
- html5 drawimage参数,小程序中canvas的drawImage方法参数详解
最近在开发小程序,海报生成的过程中,要在carvas中不断去添加图片,对小程序的drawImage参数不是很明确,这次解惑. 示例代码 有三个版本的写法: drawImage(imageResourc ...
- 用html5做一个简单的作品,html5 canvas 简单画板实现代码
canvas简单画板 canvas简单画板 提示:您可以先修改部分代码再运行
- html5 canvas 画板 demo,html5 canvas 简单画板实现代码
canvas简单画板 #can{ width:600px; height:500px; border:1px solid #ccc; margin-top:0px; margin-left:20px; ...
- 巧用canvas实现画板功能,使用画笔在图片上涂画,橡皮擦可擦除涂画,并保存
canvas 是HTML5的元素,使用JavaScript 在网页上绘制图像. canvas 拥有多种绘制路径.矩形.圆形.字符以及添加图像的方法. 而如果想实现画笔在画板涂画画笔在图片上涂画,橡皮擦 ...
- 基于HTML5的数据可视化方法有哪些
现在在大数据的带领下,数据可视化越来越突出,能够清楚的分析出自己想要的数据,这也是我们现在最求的数据可视化方法,那么实现HTML5的数据可视化方法有哪些?这都是我们值得研究的东西,数据可以给我们带 ...
最新文章
- Linux下打造仿Mac系统桌面
- mysql order 关键字_PHP数据库MySQL Order By 关键词 - PHP教程
- Xcode搭建真机调试环境 图文实例
- E. Beautiful Subarrays(思维 01 trie 树)
- jQuery事件整合
- 【文章】一副对联,便写尽了人生
- (01)JVM-内存三大核心区域以及分析
- Tomcat设置监听端口80、配置虚拟主机、安装zrlog博客、日志文件
- 批量插入数据到sqlserver
- sql row_number() over() 来自动产生行号
- 佳能ts9020墨盒不识别_佳能打印机哪一款性价比高 佳能打印机型号推荐【详解】...
- 论文参考文献格式及意义
- 暨南大学计算机系录取分数线,暨南大学2017年在广东省各专业录取分数线
- Windows数字签名 数字签名(代码签名)流程
- AR算法原理在计算机视觉中的应用
- 逆水寒 各个服务器位置,2019年3月28日首个“超级大服”服务器合并命名结果公告...
- 微信公众号 微信连wifi最全的教程
- 关于寒武纪的前世今生与未来
- MinGW编译log4cpp
- docker 传递 profile