http://jsfiddle.net/299X4/
闲来无事,做了个小demo,顺便练习一下用原生s实现拖动效果。
document.getElementById("can3").addEventListener("mousedown",function(e){
var rect = e.currentTarget.getBoundingClientRect();
var gravityPoint = {
x: e.clientX - rect.left,
y: e.clientY - rect.top
};
if (gravityPoint.x >= ctx3_x && gravityPoint.x <= ctx3_x + 10 && gravityPoint.y >= ctx3_y && gravityPoint.y <= ctx3_y + 50) {
dragFlag = true;
pre_x = gravityPoint.x - ctx3_x;
pre_y = gravityPoint.y - ctx3_y;
}
});
document.getElementById("can3").addEventListener("mouseup",function(e){
var rect = e.currentTarget.getBoundingClientRect();
var gravityPoint = {
x: e.clientX - rect.left,
y: e.clientY - rect.top
};
if (gravityPoint.x >= ctx3_x && gravityPoint.x <= ctx3_x + 10 && gravityPoint.y >= ctx3_y && gravityPoint.y <= ctx3_y + 50) {
dragFlag = false;
}
});
document.getElementById("can3").addEventListener("mousemove",function(e){
var rect = e.currentTarget.getBoundingClientRect();
var gravityPoint = {
x: e.clientX - rect.left,
y: e.clientY - rect.top
};
if (dragFlag) {
ctx3_x = gravityPoint.x - pre_x;
ctx3_y = gravityPoint.y - pre_y;
ctx2.clearRect(ctx3_x, ctx3_y, 10, 50);
}
});
分情况判断,当鼠标按下,且此时鼠标坐标在橡皮的方块内时,dragflag为true,松开时为false,此时在mousemove方法里让橡皮移动。
然后来3个canvas,依次覆盖前一个,由于clearrect方法可以把canvas变透明,
所以鼠标在canvas3上移动,canvas2的内容被擦除,canvas1的文字显示出来,就是这个思路!
ok!
完!
原文:http://blog.csdn.net/u012844719/article/details/20717617