canvas.html 2.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384
  1. <!DOCTYPE html>
  2. <html lang="en">
  3. <head>
  4. <meta charset="UTF-8" />
  5. <title>canvas 鼠标缩放 拖动平移</title>
  6. <style>
  7. canvas {
  8. border: 1px solid #ccc;
  9. }
  10. </style>
  11. </head>
  12. <body>
  13. <canvas id="canvas" width="500" height="500"></canvas>
  14. <script type="text/javascript">
  15. (function () {
  16. var c = document.getElementById('canvas');
  17. var ctx = c.getContext('2d');
  18. var ax, ay, r = 30, num = 1; //绘制图形的参数
  19. var timeOutEvent = 0; //区分拖拽和点击的参数
  20. //创建图形
  21. function createBlock (a, b, r) {
  22. ctx.beginPath();
  23. ctx.fillStyle = 'red';
  24. ctx.arc(a, b, r, 0, Math.PI * 2);
  25. ctx.fill();
  26. }
  27. createBlock(200, 200, 30);
  28. c.onmousedown = function (ev) {
  29. var e = ev || event;
  30. var x = e.clientX;
  31. var y = e.clientY;
  32. timeOutEvent = setTimeout('longPress()', 500);
  33. e.preventDefault();
  34. drag(x, y, r);
  35. };
  36. //缩放
  37. c.onmousewheel = function (ev) {
  38. var e = ev || event;
  39. num += e.wheelDelta / 1200;
  40. r = 30 * num;
  41. ctx.clearRect(0, 0, c.width, c.height);
  42. if (ax == null || ay == null) {
  43. createBlock(200, 200, r);
  44. } else {
  45. if (r > 0) {
  46. createBlock(ax, ay, r);
  47. }
  48. }
  49. };
  50. //拖拽函数
  51. function drag (x, y, r) {
  52. if (ctx.isPointInPath(x, y)) {
  53. //路径正确,鼠标移动事件
  54. c.onmousemove = function (ev) {
  55. var e = ev || event;
  56. ax = e.clientX;
  57. ay = e.clientY;
  58. clearTimeout(timeOutEvent);
  59. timeOutEvent = 0;
  60. //鼠标移动每一帧都清除画布内容,然后重新画圆
  61. ctx.clearRect(0, 0, c.width, c.height);
  62. createBlock(ax, ay, r);
  63. };
  64. //鼠标移开事件
  65. c.onmouseup = function () {
  66. c.onmousemove = null;
  67. c.onmouseup = null;
  68. clearTimeout(timeOutEvent);
  69. if (timeOutEvent != 0) {
  70. alert('你这是点击,不是拖拽');
  71. }
  72. };
  73. }
  74. }
  75. function longPress () {
  76. timeOutEvent = 0;
  77. }
  78. })();
  79. </script>
  80. </body>
  81. </html>