esign.js 4.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157
  1. (function (root, doc, factory) {
  2. if (typeof define === "function" && define.amd) {
  3. define( ["jquery"], function ($) {
  4. return factory($);
  5. });
  6. } else {
  7. factory(root.jQuery);
  8. }
  9. }(this, document, function($) {
  10. $.fn.esign = function(canvasEdit, sign_show, sign_clear, sign_ok) {
  11. var domMap = domInit(canvasEdit, sign_show, sign_clear, sign_ok);
  12. var canvas = domMap.canvasEdit[0];
  13. if (typeof document.ontouchstart != "undefined") {
  14. canvas.addEventListener('touchmove', onMouseMove, false);
  15. canvas.addEventListener('touchstart', onMouseDown, false);
  16. canvas.addEventListener('touchend', onMouseUp, false);
  17. } else {
  18. canvas.addEventListener('mousemove', onMouseMove, false);
  19. canvas.addEventListener('mousedown', onMouseDown, false);
  20. canvas.addEventListener('mouseup', onMouseUp, false);
  21. canvas.addEventListener('mouseleave', onMouseUp, false);
  22. }
  23. var context = canvas.getContext('2d');
  24. var linex = new Array();
  25. var liney = new Array();
  26. var linen = new Array();
  27. var lastX = 1;
  28. var lastY = 30;
  29. var flag = 0;
  30. domMap.sign_ok.on("click",function(){
  31. preview();
  32. rewrite();
  33. });
  34. domMap.sign_clear.click(function(){
  35. clearImg();
  36. rewrite();
  37. });
  38. function domInit(canvasEdit, sign_show, sign_clear, sign_ok){
  39. var domMap = {};
  40. if(!canvasEdit){
  41. domMap.canvasEdit = $("#canvasEdit");
  42. } else{
  43. domMap.canvasEdit = $("#" + canvasEdit);
  44. }
  45. if(!sign_show){
  46. domMap.sign_show = $("#sign_show");
  47. } else{
  48. domMap.sign_show = $("#" + sign_show);
  49. }
  50. if(!sign_clear){
  51. domMap.sign_clear = $("#sign_clear");
  52. } else{
  53. domMap.sign_clear = $("#" + sign_clear);
  54. }
  55. if(!sign_ok){
  56. domMap.sign_ok = $("#sign_ok");
  57. } else{
  58. domMap.sign_ok = $("#" + sign_ok);
  59. }
  60. return domMap;
  61. }
  62. function getCanvasPos(canvas, evt) {
  63. var rect = canvas.getBoundingClientRect();
  64. var x, y;
  65. if (evt.targetTouches) {
  66. x = evt.targetTouches[0].clientX;
  67. y = evt.targetTouches[0].clientY;
  68. } else {
  69. x = evt.clientX;
  70. y = evt.clientY;
  71. }
  72. return {
  73. x: (x - rect.left) * (canvas.width / rect.width),
  74. y: (y - rect.top) * (canvas.height / rect.height)
  75. }
  76. }
  77. function onMouseMove(evt)
  78. {
  79. var x = getCanvasPos(canvas, evt).x,
  80. y = getCanvasPos(canvas, evt).y;
  81. if (flag == 1) {
  82. linex.push(x);
  83. liney.push(y);
  84. linen.push(1);
  85. context.save();
  86. context.translate(context.canvas.width / 2, context.canvas.height / 2);
  87. context.translate(-context.canvas.width / 2 , -context.canvas.height/2);
  88. context.beginPath();
  89. context.lineWidth = 2;
  90. for (var i = 1; i < linex.length; i++) {
  91. lastX = linex[i];
  92. lastY = liney[i];
  93. if (linen[i] == 0)
  94. context.moveTo(lastX, lastY);
  95. else
  96. context.lineTo(lastX, lastY);
  97. }
  98. context.shadowBlur = 10;
  99. context.stroke();
  100. context.restore();
  101. }
  102. evt.preventDefault();
  103. }
  104. function onMouseDown(evt) {
  105. var x = getCanvasPos(canvas, evt).x,
  106. y = getCanvasPos(canvas, evt).y;
  107. flag = 1;
  108. linex.push(x);
  109. liney.push(y);
  110. linen.push(0);
  111. }
  112. function onMouseUp() {
  113. flag = 0;
  114. }
  115. function rewrite(){
  116. linex = new Array();
  117. liney = new Array();
  118. linen = new Array();
  119. context.clearRect(0, 0, canvas.width, canvas.height);
  120. }
  121. function clearImg(){
  122. domMap.sign_show[0].innerHTML = "";
  123. }
  124. function preview(){
  125. var show = domMap.sign_show[0];
  126. show.innerHTML = "";
  127. show.appendChild(convertCanvasToImage(canvas));
  128. $("#sign_dir").val(canvas.toDataURL("i/png"));
  129. }
  130. function convertCanvasToImage(canvas){
  131. var image = new Image();
  132. image.width = 80;
  133. image.height = 50;
  134. image.src = canvas.toDataURL("i/png");
  135. return image;
  136. }
  137. };
  138. return $.fn.esign;
  139. }));