查看效果请到 http://philippica.github.io/ 点击drag
和上一篇画图很像,所以有些部分做了省略
当鼠标按下时保存当前画布上的内容到ppImgData中,并且记录下初始点的位置,当鼠标移动时调用ppDrag函数
1 $('#myCanvas').unbind(); 2 $('#myCanvas').mousemove(function(e) 3 { 4 if(ppMousePressed) 5 { 6 var mouseX = e.pageX - this.offsetLeft; 7 var mouseY = e.pageY - this.offsetTop; 8 context.clearRect(0, 0, ppCanvasWidth, ppCanvasHeight);//清屏 9 ppDrag(mouseX, mouseY); 10 } 11 }); 12 $('#myCanvas').mousedown(function(e) 13 { 14 if(e.which == 1)//茹果是左键 15 { 16 ppMousePressed = true; 17 ppImgData = context.getImageData(0, 0, ppCanvasWidth, ppCanvasHeight);//保存当前画布 18 var mouseX = e.pageX - this.offsetLeft; 19 var mouseY = e.pageY - this.offsetTop; 20 ppInitialPoint = new ppPoint(mouseX, mouseY);//记录鼠标初始位置 21 } 22 }); 23 $(window).mouseup(function(e){ 24 ppMousePressed = false; 25 });
所以关键就是ppDrag怎么写
然后也挺简单的,putImageData函数的后两个参数是画出图像的左上角坐标,然后就可以根据鼠标的初始位置、鼠标当前位置计算(其实就是做个差)出当前应该画的位置了
1 function ppDrag(curX, curY) 2 { 3 var dX = curX - ppInitialPoint.x; 4 var dY = curY - ppInitialPoint.y; 5 console.info(dX+" "+dY); 6 context.putImageData(ppImgData, dX, dY); 7 }