最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

js插件實現(xiàn)圖片滑動驗證碼

 更新時間:2020年09月29日 15:52:35   作者:飛奔的貓  
這篇文章主要為大家詳細介紹了js插件實現(xiàn)圖片滑動驗證碼,滑動模塊,實現(xiàn)驗證功能,具有一定的參考價值,感興趣的小伙伴們可以參考一下

圖片滑動驗證碼,邏輯是根據(jù)鼠標滑動軌跡,坐標位置,計算拖動速度等等來判斷是否人為操作,當然下面的代碼只是實現(xiàn)前端部分,只記錄了拖動的坐標。

先上代碼吧,做個備份記錄

jquery.lgymove.js

/** 
 * Created by lgy on 2017/10/21. 
 * 圖片驗證碼 
 */ 
(function ($) { 
 $.fn.imgcode = function (options) { 
 //初始化參數(shù) 
 var defaults = { 
  callback:"" //回調(diào)函數(shù) 
 }; 
 var opts = $.extend(defaults, options); 
 return this.each(function () { 
  var $this = $(this);//獲取當前對象 
  var html = '<div class="code-k-div">' + 
  '<div class="code_bg"></div>' + 
  '<div class="code-con">' + 
  '<div class="code-img">' + 
  '<div class="code-img-con">' + 
  '<div class="code-mask"><img src="../img/front(1).png"></div>' + 
  '<img src="../img/back(1).png"></div>' + 
  '<div class="code-push"><i class="icon-login-bg icon-w-25 icon-push">刷新</i><span class="code-tip"></span></div>' + 
  '</div>' + 
  '<div class="code-btn">' + 
  '<div class="code-btn-img code-btn-m"></div>' + 
  '<span>按住滑塊,拖動完成上方拼圖</span>' + 
  '</div></div></div>'; 
  $this.html(html); 
 
  //定義拖動參數(shù) 
  var $divMove = $(this).find(".code-btn-img"); //拖動按鈕 
  var $divWrap = $(this).find(".code-btn");//鼠標可拖拽區(qū)域 
  var mX = 0, mY = 0;//定義鼠標X軸Y軸 
  var dX = 0, dY = 0;//定義滑動區(qū)域左、上位置 
  var isDown = false;//mousedown標記 
  if(document.attachEvent) {//ie的事件監(jiān)聽,拖拽div時禁止選中內(nèi)容,firefox與chrome已在css中設置過-moz-user-select: none; -webkit-user-select: none; 
  $divMove[0].attachEvent('onselectstart', function() { 
   return false; 
  }); 
  } 
  //按鈕拖動事件 
  $divMove.on({ 
  mousedown: function (e) { 
   //清除提示信息 
   $this.find(".code-tip").html(""); 
   var event = e || window.event; 
   mX = event.pageX; 
   dX = $divWrap.offset().left; 
   dY = $divWrap.offset().top; 
   isDown = true;//鼠標拖拽啟 
   $(this).addClass("active"); 
   //修改按鈕陰影 
   $divMove.css({"box-shadow":"0 0 8px #666"}); 
  } 
  }); 
  //鼠標點擊松手事件 
  $(document).mouseup(function (e) { 
  var lastX = $this.find(".code-mask").offset().left - dX - 1; 
  isDown = false;//鼠標拖拽啟 
  $divMove.removeClass("active"); 
  //還原按鈕陰影 
  $divMove.css({"box-shadow":"0 0 3px #ccc"}); 
  checkcode(lastX); 
  }); 
  //滑動事件 
  $divWrap.mousemove(function (event) { 
  var event = event || window.event; 
  var x = event.pageX;//鼠標滑動時的X軸 
  if (isDown) { 
   if(x>(dX+30) && x<dX+$(this).width()-20){ 
   $divMove.css({"left": (x - dX - 20) + "px"});//div動態(tài)位置賦值 
   $this.find(".code-mask").css({"left": (x - dX-30) + "px"}); 
   } 
  } 
  }); 
  //驗證數(shù)據(jù) 
  function checkcode(code){ 
  var iscur=false; 
  //模擬ajax 
  setTimeout(function(){ 
   if(iscur){ 
   checkcoderesult(1,"驗證通過"); 
   $this.find(".code-k-div").hide(); 
   opts.callback({code:1000,msg:"驗證通過",msgcode:"23dfdf123"}); 
   }else{ 
   $divMove.addClass("error"); 
   checkcoderesult(0,"驗證不通過"); 
   opts.callback({code:1001,msg:"驗證不通過"}); 
   setTimeout(function() { 
    $divMove.removeClass("error"); 
    $this.find(".code-mask").animate({"left":"0px"},200); 
    $divMove.animate({"left": "10px"},200); 
   },400); 
   } 
  },500) 
  } 
  //驗證結(jié)果 
  function checkcoderesult(i,txt){ 
  if(i==0){ 
   $this.find(".code-tip").addClass("code-tip-red"); 
  }else{ 
   $this.find(".code-tip").addClass("code-tip-green"); 
  } 
  $this.find(".code-tip").html(txt); 
  } 
 }) 
 } 
})(jQuery); 

css部分:

.code_bg{ 
 position: fixed; 
 top:0; 
 left: 0; 
 right:0; 
 bottom:0; 
 background-color: rgba(0,0,0,.5); 
 z-index: 99; 
} 
.icon-login-bg{ 
 background-image: url(../img/icon/loginicon.png); 
 background-repeat: no-repeat; 
} 
.code-con{ 
 position: absolute; 
 top:100px; 
 width: 320px; 
 left: 50%; 
 margin-left: -160px; 
 background-color: #fff; 
 z-index: 100; 
 -moz-user-select: none; 
 -webkit-user-select: none; 
} 
.code-img{ 
 margin: 5px 5px; 
 padding: 5px 5px; 
 background-color: #f5f6f7; 
} 
.code-img img{ 
 display: block; 
} 
.icon-w-25{ 
 display: inline-block; 
 width: 25px; 
 height: 25px; 
 text-indent: -9999px; 
} 
.icon-push{ 
 cursor: pointer; 
 background-position: -149px -95px; 
} 
.code-push{ 
 height: 25px; 
} 
.code-btn{ 
 position: relative; 
 height: 30px; 
 text-align: center; 
 color: #999; 
 margin: 10px 10px; 
 box-sizing: border-box; 
 background-color: #f5f6f7; 
 border-radius: 15px; 
 border: 1px solid #e1e1e1; 
} 
.code-btn-m{ 
 position: absolute; 
 width: 40px; 
 height: 40px; 
 border-radius: 50%; 
 background-color: #f5f6f7; 
 border: 1px solid #e1e1e1; 
 z-index: 5; 
 top:-8px; 
 left: 10px; 
 box-shadow: 0 0 3px #ccc; 
 cursor: pointer; 
 background-position: -63px 10px; 
} 
.code-btn-img{ 
 background-image:url(../img/icon/codejt.png); 
 background-repeat: no-repeat; 
} 
.code-btn-img.active{ 
 background-position: -134px 10px; 
} 
.code-btn-img.error{ 
 background-position: 8px 10px; 
} 
.code-img-con{ 
 position: relative; 
} 
.code-mask{ 
 position: absolute; 
 top:0; 
 left: 0; 
 z-index: 10; 
} 
.code-tip{ 
 padding-left: 10px; 
 font-size: 12px; 
 color: #999; 
} 
.code-tip-red{ 
 color: red; 
} 
.code-tip-green{ 
 color: green; 
} 

html部分:

<div id="imgscode"></div> 
<script> 
$("#imgscode").imgcode(); 
</script> 

效果圖:

以上就是本文的全部內(nèi)容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。

相關文章

  • Postman如何實現(xiàn)參數(shù)化執(zhí)行及斷言處理

    Postman如何實現(xiàn)參數(shù)化執(zhí)行及斷言處理

    這篇文章主要介紹了Postman如何實現(xiàn)參數(shù)化執(zhí)行及斷言處理,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2020-07-07
  • 淺談JavaScript異步編程

    淺談JavaScript異步編程

    本文主要介紹了javascript的異步編程相關知識。具有一定的參考價值,下面跟著小編一起來看下吧
    2017-01-01
  • JavaScript電子時鐘倒計時第二款

    JavaScript電子時鐘倒計時第二款

    這篇文章主要介紹了JavaScript電子時鐘倒計時的實現(xiàn)代碼,具有一定的參考價值,感興趣的朋友可以參考一下
    2016-01-01
  • 詳解CocosCreator中幾種計時器的使用方法

    詳解CocosCreator中幾種計時器的使用方法

    這篇文章主要介紹了CocosCreator中幾種計時器的使用方法,推薦使用schedule,功能多些,銷毀時還能自動移除
    2021-04-04
  • 微信小程序使用map組件實現(xiàn)解析經(jīng)緯度功能示例

    微信小程序使用map組件實現(xiàn)解析經(jīng)緯度功能示例

    這篇文章主要介紹了微信小程序使用map組件實現(xiàn)解析經(jīng)緯度功能,涉及微信小程序map組件結(jié)合高德地圖進行經(jīng)緯度獲取相關操作技巧,需要的朋友可以參考下
    2019-01-01
  • JS如何使用剪貼板操作Clipboard API

    JS如何使用剪貼板操作Clipboard API

    瀏覽器允許JavaScript腳本讀寫剪貼板,自動復制或粘貼內(nèi)容。一般來說,腳本不應該改動用戶的剪貼板,以免不符合用戶的預期。但是,有些時候這樣做確實能夠帶來方便,比如"一鍵復制"功能,用戶點擊一下按鈕,指定的內(nèi)容就自動進入剪貼板。本文將介紹3種方法來實現(xiàn)。
    2021-05-05
  • 微信小程序自定義時間段picker選擇器

    微信小程序自定義時間段picker選擇器

    這篇文章主要為大家詳細介紹了微信小程序自定義時間段picker選擇器,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-07-07
  • php 解壓zip壓縮包內(nèi)容到指定目錄的實例

    php 解壓zip壓縮包內(nèi)容到指定目錄的實例

    下面小編就為大家分享一篇php 解壓zip壓縮包內(nèi)容到指定目錄的實例,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-01-01
  • 使用JavaScript獲取Django模板指定鍵值數(shù)據(jù)

    使用JavaScript獲取Django模板指定鍵值數(shù)據(jù)

    這篇文章主要介紹了使用JavaScript獲取Django模板指定鍵值數(shù)據(jù),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2020-05-05
  • 深入了解JavaScript中的函數(shù)式編程

    深入了解JavaScript中的函數(shù)式編程

    JavaScript是一門多范式的編程語言,其中函數(shù)式編程成為了一種受歡迎的范式之一,本文將帶您深入了解JavaScript函數(shù)式編程的核心概念和技術(shù),需要的可以參考一下
    2023-06-06

最新評論

神农架林区| 汨罗市| 桐梓县| 师宗县| 化德县| 新安县| 镇康县| 无锡市| 偃师市| 合川市| 柳河县| 厦门市| 临武县| 云阳县| 巨野县| 濮阳市| 宁阳县| 凤翔县| 长岭县| 静宁县| 盐源县| 上思县| 凭祥市| 兴安盟| 子洲县| 西和县| 天全县| 丰县| 佛坪县| 开封县| 柏乡县| 崇州市| 磐石市| 开远市| 林西县| 修武县| 泾川县| 卢湾区| 阳山县| 搜索| 浠水县|