jquery.lgyslide.js 5.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195
  1. /**
  2. * Created by lgy on 2017/10/21. 图片验证码
  3. */
  4. (function($) {
  5. $.fn.imgcode = function(options) {
  6. // 初始化参数
  7. var defaults = {
  8. frontimg : "",
  9. backimg : "",
  10. refreshImg : "",
  11. getsuccess : "",
  12. getfail : "",
  13. maskclose : true,
  14. callback : "", // 回调函数
  15. refreshcallback : "",
  16. yHeight : 1
  17. };
  18. var opts = $.extend(defaults, options);
  19. return this
  20. .each(function() {
  21. var $this = $(this);// 获取当前对象
  22. var html = '<div class="code-k-div">'
  23. + '<div class="code_bg"></div>'
  24. + '<div class="code-con">'
  25. + '<div class="code-img">'
  26. + '<div class="code-img-con">'
  27. + '<div class="code-mask"><img class="code-front-img" src="'
  28. + opts.frontimg
  29. + '"></div>'
  30. + '<img class="code-back-img" src="'
  31. + opts.backimg
  32. + '"></div>'
  33. + '<div class="code-push"><i class="icon-login-bg icon-w-25 icon-push">刷新</i><span class="code-tip"></span></div>'
  34. + '</div>' + '<div class="code-btn">'
  35. + '<div class="code-btn-img code-btn-m"></div>'
  36. + '<span class="code-span">按住滑块,拖动完成上方拼图</span>'
  37. + '</div></div></div>';
  38. $this.html(html);
  39. $(".code-mask").css("margin-top",opts.yHeight+"px")
  40. // 定义拖动参数
  41. var $divMove = $(this).find(".code-btn-img"); // 拖动按钮
  42. var $divWrap = $(this).find(".code-btn");// 鼠标可拖拽区域
  43. var mX = 0, mY = 0;// 定义鼠标X轴Y轴
  44. var dX = 0, dY = 0;// 定义滑动区域左、上位置
  45. var isDown = false;// mousedown标记
  46. if (document.attachEvent) {// ie的事件监听,拖拽div时禁止选中内容,firefox与chrome已在css中设置过-moz-user-select:
  47. // none; -webkit-user-select:
  48. // none;
  49. $divMove[0].attachEvent('onselectstart', function() {
  50. return false;
  51. });
  52. }
  53. // 按钮拖动事件
  54. $divMove.unbind('mousedown').on({
  55. mousedown : function(e) {
  56. // 清除提示信息
  57. $this.find(".code-tip").html("");
  58. var event = e || window.event;
  59. mX = event.pageX;
  60. dX = $divWrap.offset().left;
  61. dY = $divWrap.offset().top;
  62. isDown = true;// 鼠标拖拽启
  63. $(this).addClass("active");
  64. // 修改按钮阴影
  65. $divMove.css({
  66. "box-shadow" : "0 0 8px #666"
  67. });
  68. }
  69. });
  70. // 点击背景关闭
  71. if (opts.maskclose) {
  72. $this.find(".code_bg").unbind('click').click(
  73. function() {
  74. $this.html("");
  75. })
  76. }
  77. // 刷新code码
  78. $this.find(".icon-push").unbind('click').click(function() {
  79. opts.refreshcallback();
  80. });
  81. // 鼠标点击松手事件
  82. $divMove.unbind('mouseup')
  83. .mouseup(
  84. function(e) {
  85. console.log(e)
  86. var lastX = $this.find(".code-mask")
  87. .offset().left
  88. - dX - 1;
  89. isDown = false;// 鼠标拖拽启
  90. $divMove.removeClass("active");
  91. // 还原按钮阴影
  92. $divMove.css({
  93. "box-shadow" : "0 0 3px #ccc"
  94. });
  95. returncode(lastX);
  96. });
  97. // 滑动事件
  98. $divWrap
  99. .mousemove(function(event) {
  100. var event = event || window.event;
  101. var x = event.pageX;// 鼠标滑动时的X轴
  102. if (isDown) {
  103. if (x > (dX + 20)
  104. && x < dX + $(this).width() - 20) {
  105. $divMove.css({
  106. "left" : (x - dX - 20) + "px"
  107. });// div动态位置赋值
  108. $this.find(".code-mask").css({
  109. "left" : (x - dX - 20) + "px"
  110. });
  111. }
  112. }
  113. });
  114. // 返回坐标系
  115. function returncode(xpos) {
  116. opts.callback({
  117. xpos : xpos
  118. });
  119. }
  120. // 验证数据
  121. function checkcode(code) {
  122. var iscur = true;
  123. // 模拟ajax
  124. setTimeout(function() {
  125. if (iscur) {
  126. checkcoderesult(1, "验证通过");
  127. $this.find(".code-k-div").remove();
  128. opts.callback({
  129. code : 1000,
  130. msg : "验证通过",
  131. msgcode : "23dfdf123"
  132. });
  133. } else {
  134. $divMove.addClass("error");
  135. checkcoderesult(0, "验证不通过");
  136. opts.callback({
  137. code : 1001,
  138. msg : "验证不通过"
  139. });
  140. setTimeout(function() {
  141. $divMove.removeClass("error");
  142. $this.find(".code-mask").animate({
  143. "left" : "0px"
  144. }, 200);
  145. $divMove.animate({
  146. "left" : "10px"
  147. }, 200);
  148. }, 300);
  149. }
  150. }, 500)
  151. }
  152. // 刷新图标
  153. opts.refreshImg = function(data) {
  154. console.log(data)
  155. $this.find(".code-img-con .code-front-img").attr("src",
  156. data.frontImg);
  157. $this.find(".code-img-con .code-back-img").attr("src",
  158. data.backGoundImg);
  159. }
  160. // 验证成功
  161. opts.getsuccess = function() {
  162. checkcoderesult(1, "验证通过");
  163. setTimeout(function() {
  164. $this.find(".code-k-div").remove();
  165. }, 800);
  166. }
  167. // 验证失败
  168. opts.getfail = function(txt) {
  169. $divMove.addClass("error");
  170. checkcoderesult(0, txt);
  171. setTimeout(function() {
  172. $divMove.removeClass("error");
  173. $this.find(".code-mask").animate({
  174. "left" : "0px"
  175. }, 200);
  176. $divMove.animate({
  177. "left" : "10px"
  178. }, 200);
  179. }, 400);
  180. }
  181. // 验证结果
  182. function checkcoderesult(i, txt) {
  183. if (i == 0) {
  184. $this.find(".code-tip").addClass("code-tip-red");
  185. } else {
  186. $this.find(".code-tip").addClass("code-tip-green");
  187. }
  188. $this.find(".code-tip").html(txt);
  189. }
  190. })
  191. }
  192. })(jQuery);