使用HTML5的Canvas标签实现绘图板内拖拽元素
2017-10-25 21:53
579 查看
第一次在csdn发表文章,纯属试水之作。希望各位多多指教。
直奔主题吧。本人使用了一下HTML5的Canvas标签之后,挺好用的各种画线条,图案等。能实现对Canvas标签内的像素进行随意编辑。加上各种鼠标事件就能实际绘图板,拖拽等功能了。
为了完成目标需要的准备如下:
1.使用Canvas绘制初始图像。
2.使用javascript的全局变量+(鼠标的移动、按住和放开的这3个事件)实现拖拽事件
3.要能得知 鼠标的指针的坐标(最重要)
event.offsetX//可以获取鼠标指针相对与元素的X坐标
event.offsetY//可以获取鼠标指针相对与元素的Y坐标
4.定义判断 特定图形编辑的规则
5.重新绘制图像。
最终成品如下:
<!DOCTYPE HTML>
<html>
<head>
<script type="text/javascript">
var x=0;
var y=0;
var x2=0;
var y2=0;
var flag=false;
function cnvs_getCoordinates(e)
{
tempx=e.offsetX;
tempy=e.offsetY;
if(flag){
if(tempx>(x-25)&&tempx<(x+25)&&tempy>(y-25)&&tempy<(y+25)){
x=x2+tempx;
y=y2+tempy;
if(x>90&&x<100&&y>90&&y<100)
{
document.getElementById("xycoordinates").innerHTML="特定区域,可用于触发其它事件";
}
else{
document.getElementById("xycoordinates").innerHTML="Coordinates: (" + tempx + "," + tempy + ")";
REMS(x,y);
}
}
}
}
function InitCanvas(){
x=Math.random()*450+25;
y=Math.random()*450+25;
REMS(x,y);
}
function REMS(a,b){
var c=document.getElementById("ls");
var cxt=c.getContext("2d");
cxt.clearRect(0,0,500,500);
cxt.fillStyle="#FF0000";
cxt.fillRect(a-25,y-25,50,50);
}
function T1(e){
flag=true;
tempx=e.offsetX;
tempy=e.offsetY;
if(tempx>(x-25)&&tempx<(x+25)&&tempy>(y-25)&&tempy<(y+25)){
x2=x-tempx;
y2=y-tempy;
}
}
function F1(){
flag=false;
}
</script>
<title>My JSP 'MyJsp.jsp' starting page</title>
<!--
<link rel="stylesheet" type="text/css" href="styles.css">
-->
</head>
<body>
This is my JSP page2. <br>
<button onclick="InitCanvas()">TestInit</button>
<div id="xycoordinates"></div>
<hr>
<canvas height="500" width="500" id="ls" onmousemove="cnvs_getCoordinates(event)" onmousedown="T1(event)" onmouseup="F1()" onmouseout="F1()"></canvas>
<hr>
</body>
</html>
直奔主题吧。本人使用了一下HTML5的Canvas标签之后,挺好用的各种画线条,图案等。能实现对Canvas标签内的像素进行随意编辑。加上各种鼠标事件就能实际绘图板,拖拽等功能了。
为了完成目标需要的准备如下:
1.使用Canvas绘制初始图像。
2.使用javascript的全局变量+(鼠标的移动、按住和放开的这3个事件)实现拖拽事件
3.要能得知 鼠标的指针的坐标(最重要)
event.offsetX//可以获取鼠标指针相对与元素的X坐标
event.offsetY//可以获取鼠标指针相对与元素的Y坐标
4.定义判断 特定图形编辑的规则
5.重新绘制图像。
最终成品如下:
<!DOCTYPE HTML>
<html>
<head>
<script type="text/javascript">
var x=0;
var y=0;
var x2=0;
var y2=0;
var flag=false;
function cnvs_getCoordinates(e)
{
tempx=e.offsetX;
tempy=e.offsetY;
if(flag){
if(tempx>(x-25)&&tempx<(x+25)&&tempy>(y-25)&&tempy<(y+25)){
x=x2+tempx;
y=y2+tempy;
if(x>90&&x<100&&y>90&&y<100)
{
document.getElementById("xycoordinates").innerHTML="特定区域,可用于触发其它事件";
}
else{
document.getElementById("xycoordinates").innerHTML="Coordinates: (" + tempx + "," + tempy + ")";
REMS(x,y);
}
}
}
}
function InitCanvas(){
x=Math.random()*450+25;
y=Math.random()*450+25;
REMS(x,y);
}
function REMS(a,b){
var c=document.getElementById("ls");
var cxt=c.getContext("2d");
cxt.clearRect(0,0,500,500);
cxt.fillStyle="#FF0000";
cxt.fillRect(a-25,y-25,50,50);
}
function T1(e){
flag=true;
tempx=e.offsetX;
tempy=e.offsetY;
if(tempx>(x-25)&&tempx<(x+25)&&tempy>(y-25)&&tempy<(y+25)){
x2=x-tempx;
y2=y-tempy;
}
}
function F1(){
flag=false;
}
</script>
<title>My JSP 'MyJsp.jsp' starting page</title>
<!--
<link rel="stylesheet" type="text/css" href="styles.css">
-->
</head>
<body>
This is my JSP page2. <br>
<button onclick="InitCanvas()">TestInit</button>
<div id="xycoordinates"></div>
<hr>
<canvas height="500" width="500" id="ls" onmousemove="cnvs_getCoordinates(event)" onmousedown="T1(event)" onmouseup="F1()" onmouseout="F1()"></canvas>
<hr>
</body>
</html>
相关文章推荐
- HTML5中video标签与canvas绘图的使用
- HTML5中canvas使用技巧和布局标签介绍
- 在IE6系列等老式浏览器中使用HTML5的新标签实现方案
- HTML5学习(2) canvas标签的使用四
- html5基础--canvas标签元素
- HTML5-Canvas标签使用实例一
- HTML5 vedio标签与canvas的结合实现视频同步模糊效果
- jquery使用列表标签实现的可拖拽listbox
- 基于HTML5实现的(本地存储)多标签页面元素的复制粘贴
- View 使用线程实现canvas 内动态绘图 postInvalidate()
- HTML5学习-使用 Canvas 来创建绘图应用程序
- HTML5 中的 canvas 标签 实现动画效果
- HTML5-Canvas标签使用实例一
- HTML5新特性之Canvas+drag(拖拽图像实现图像反转)
- HTML5 Canvas标签使用收录
- HTML5学习(2) canvas标签的使用三
- html5使用canvas实现跟随光标跳动的火焰效果
- 使用HTML5 Canvas实现马赛克拼图
- HTML5新特性之Canvas+drag(拖拽图像实现图像反转)
- HTML5 CANVAS 元素 实现 GIS的一篇文章