zoukankan      html  css  js  c++  java
  • [canvas入坑1]canvas 画布拖拽效果

    查看效果请到 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 }
  • 相关阅读:
    洛谷P1724 东风谷早苗
    hdu 1001 Sum Problem
    洛谷 P1006 传纸条
    codevs 6116 区间素数
    LibreOJ #101. 最大流
    洛谷 P1455 搭配购买
    LibreOJ #119. 最短路 (堆优化dijkstra)
    LibreOJ #109. 并查集
    COGS.1200 ganggang的烦恼
    uoj #15. 【NOIP2014】生活大爆炸版石头剪刀布
  • 原文地址:https://www.cnblogs.com/philippica/p/4925033.html
Copyright © 2011-2022 走看看