求救:html5中 onmousemove怎样撤销已经画的路径直线

LuckyJan 2014-01-27 11:40:14
我在下面代码onmousemove中需要清除前面一次画过的直线,怎么办?
canvas.restore(); 没有效果啊,求救


//画直线,鼠标按下时,当前鼠标位置为起点
var status = 0;
canvas.onmousedown=function(e){
e=window.event||e;
var sX=e.pageX-this.offsetLeft;
var sY=e.pageY-this.offsetTop;
can.save();//????
can.beginPath();
can.moveTo(sX,sY);
status=1;
}
//鼠标移动的时候
canvas.onmousemove=function(e){
e=window.event||e;
var eX=e.pageX-this.offsetLeft;
var eY=e.pageY-this.offsetTop;
if(status==1){
can.restore(); //?????
can.lineTo(eX,eY);
can.closePath();
can.stroke();
}else {return false}

}
//画直线,鼠标抬起时
canvas.onmouseup=function(e){
can.closePath();
status=0;
}
...全文
452 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
似梦飞花 2014-02-11
  • 打赏
  • 举报
回复
restore是还原context的状态 比如fillStyle之类的 并不是还原canvas画了的东西 具体的你可以看下命令模式 把每次操作转换为一命令对象 放入堆栈中 当需要还原时弹出栈undo试试
蝶恋花雨 2014-01-28
  • 打赏
  • 举报
回复
canvas.onmousedown=function(e){
    e=window.event||e;
    var sX=e.pageX-this.offsetLeft;
    var sY=e.pageY-this.offsetTop;
    can.beginPath();
    can.moveTo(sX,sY);
    status=1;
    can.save();//画完后保存
}
//鼠标移动的时候
canvas.onmousemove=function(e){
    e=window.event||e;
    var eX=e.pageX-this.offsetLeft;
    var eY=e.pageY-this.offsetTop;
    if(status==1){
        can.lineTo(eX,eY);
        can.closePath();
        can.stroke();
        can.restore(); //还原
    }else {return false}
             
}
蝶恋花雨 2014-01-28
  • 打赏
  • 举报
回复
context.restore(); //恢复到context.save()时的context状态 在对canvas进行缩放操作的时候,为了不影响其他部分,需要对context的状态进行保存 ,操作完毕后在 进行恢复,也就是在操作之前调用context.save(),操作完毕之后调用 .restore()方法 http://blog.sina.com.cn/s/blog_a3468cf601013dmi.html

39,084

社区成员

发帖
与我相关
我的任务
社区描述
HTML5是构建Web内容的一种语言描述方式。HTML5是互联网的下一代标准,是构建以及呈现互联网内容的一种语言方式.被认为是互联网的核心技术之一。
社区管理员
  • HTML5社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧