電腦和手機移動端都適用的jQuery拖動滑塊圖片拼圖驗證碼插件,通過鼠標拖動或觸屏滑動填充拼圖來進行安全驗證,點擊刷新可以更換當前待驗證的圖片。
HTML & css:
<!DOCTYPEhtml><htmllang="zh"><head><metacharset="UTF-8"><metahttp-equiv="X-UA-Compatible"content="IE=edge,chrome=1"><metaname="viewport"content="width=device-width,initial-scale=1.0"><title>拖動滑塊圖片拼圖驗證碼插件</title><!--框架樣式--><linkhref="css/bootstrap.min.css"rel="externalnofollow"rel="stylesheet"><!--圖標樣式--><linkhref="https://cdn.bootcss.com/font-awesome/5.7.2/css/all.min.css"rel="stylesheet"><!--主要樣式--><linkhref="disk/slidercaptcha.css"rel="externalnofollow"rel="stylesheet"/><style>.slidercaptcha{margin:0auto;width:314px;height:286px;border-radius:4px;box-shadow:0010pxrgba(0,0,0,0.125);margin-top:40px;}.slidercaptcha.card-body{padding:1rem;}.slidercaptchacanvas:first-child{border-radius:4px;border:1pxsolid#e6e8eb;}.slidercaptcha.card.card-header{background-image:none;background-color:rgba(0,0,0,0.03);}.refreshIcon{top:-54px;}</style></head><body><pclass="container-fluid"><pclass="form-row"><pclass="col-12"><pclass="slidercaptchacard"><pclass="card-header"><span>請完成安全驗證</span></p><pclass="card-body"><pid="captcha"></p></p></p></p></p></p><scriptsrc="js/jquery-1.11.0.min.js"type="text/javascript"></script><scriptsrc="disk/longbow.slidercaptcha.js"></script><script>$('#captcha').sliderCaptcha({repeatIcon:'fafa-redo',setSrc:function(){return'https://cache.yisu.com/upload/information/20200622/114/14881.jpg';},onSuccess:function(){alert('驗證通過!');}});</script></body></html>disk/slidercaptcha.css:body{overflow-x:hidden;}.block{position:absolute;left:0;top:0;}.sliderContainer{position:relative;text-align:center;line-height:40px;background:#f7f9fa;color:#45494c;border-radius:2px;}.sliderbg{position:absolute;left:0;right:0;top:0;background-color:#f7f9fa;height:40px;border-radius:2px;border:1pxsolid#e6e8eb;}.sliderContainer_active.slider{top:-1px;border:1pxsolid#1991FA;}.sliderContainer_active.sliderMask{border-width:1px01px1px;}.sliderContainer_success.slider{top:-1px;border:1pxsolid#52CCBA;background-color:#52CCBA!important;}.sliderContainer_success.sliderMask{border:1pxsolid#52CCBA;border-width:1px01px1px;background-color:#D2F4EF;}.sliderContainer_success.sliderIcon:before{content:"\f00c";}.sliderContainer_fail.slider{top:-1px;border:1pxsolid#f57a7a;background-color:#f57a7a!important;}.sliderContainer_fail.sliderMask{border:1pxsolid#f57a7a;background-color:#fce1e1;border-width:1px01px1px;}.sliderContainer_fail.sliderIcon:before{content:"\f00d";}.sliderContainer_active.sliderText,.sliderContainer_success.sliderText,.sliderContainer_fail.sliderText{display:none;}.sliderMask{position:absolute;left:0;top:0;height:40px;border:0solid#1991FA;background:#D1E9FE;border-radius:2px;}.slider{position:absolute;top:0;left:0;width:40px;height:40px;background:#fff;box-shadow:003pxrgba(0,0,0,0.3);cursor:pointer;transition:background.2slinear;border-radius:2px;display:flex;align-items:center;justify-content:center;}.slider:hover{background:#1991FA;}.slider:hover.sliderIcon{background-position:0-13px;}.sliderText{position:relative;}.sliderIcon{}.refreshIcon{position:absolute;right:0;top:0;cursor:pointer;margin:6px;color:rgba(0,0,0,.25);font-size:1rem;z-index:5;transition:color.3slinear;}.refreshIcon:hover{color:#6c757d;}disk/longbow.slidercaptcha.js:(function($){'usestrict';varSliderCaptcha=function(element,options){this.$element=$(element);this.options=$.extend({},SliderCaptcha.DEFAULTS,options);this.$element.css({'position':'relative','width':this.options.width+'px','margin':'0auto'});this.init();};SliderCaptcha.VERSION='1.0';SliderCaptcha.Author='argo@163.com';SliderCaptcha.DEFAULTS={width:280,//canvas寬度height:155,//canvas高度PI:Math.PI,sliderL:42,//滑塊邊長sliderR:9,//滑塊半徑offset:5,//容錯偏差loadingText:'正在加載中...',failedText:'再試一次',barText:'向右滑動填充拼圖',repeatIcon:'fafa-repeat',maxLoadCount:3,localImages:function(){return'images/Pic'+math.round(Math.random()*4)+'.jpg';}};functionPlugin(option){returnthis.each(function(){var$this=$(this);vardata=$this.data('lgb.SliderCaptcha');varoptions=typeofoption==='object'&&option;if(data&&!/reset/.test(option))return;if(!data)$this.data('lgb.SliderCaptcha',data=newSliderCaptcha(this,options));if(typeofoption==='string')data[option]();});}$.fn.sliderCaptcha=Plugin;$.fn.sliderCaptcha.Constructor=SliderCaptcha;var_proto=SliderCaptcha.prototype;_proto.init=function(){this.initDOM();this.initImg();this.bindEvents();};_proto.initDOM=function(){varcreateElement=function(tagName,className){varelment=document.createElement(tagName);elment.className=className;returnelment;};varcreateCanvas=function(width,height){varcanvas=document.createElement('canvas');canvas.width=width;canvas.height=height;returncanvas;};varcanvas=createCanvas(this.options.width-2,this.options.height)//畫布varblock=canvas.clonenode(true)//滑塊varsliderContainer=createElement('p','sliderContainer');varrefreshIcon=createElement('i','refreshIcon'+this.options.repeatIcon);varsliderMask=createElement('p','sliderMask');varsliderbg=createElement('p','sliderbg');varslider=createElement('p','slider');varsliderIcon=createElement('i','fafa-arrow-rightsliderIcon');vartext=createElement('span','sliderText');block.className='block'text.innerHTML=this.options.barText;varel=this.$element;el.append($(canvas));el.append($(refreshIcon));el.append($(block));slider.appendChild(sliderIcon);sliderMask.appendChild(slider);sliderContainer.appendChild(sliderbg);sliderContainer.appendChild(sliderMask);sliderContainer.appendChild(text);el.append($(sliderContainer));Object.assign(this,{canvas,block,sliderContainer:$(sliderContainer),refreshIcon,slider,sliderMask,sliderIcon,text:$(text),canvasCtx:canvas.getContext('2d'),blockCtx:block.getContext('2d')})};_proto.initImg=function(){varthat=this;varisIE=window.navigator.userAgent.indexOf('Trident')>-1;varL=this.options.sliderL+this.options.sliderR*2+3;//滑塊實際邊長vardrawImg=function(ctx,operation){varl=that.options.sliderL;varr=that.options.sliderR;varPI=that.options.PI;varx=that.x;vary=that.y;ctx.beginPath()ctx.moveTo(x,y)ctx.arc(x+l/2,y-r+2,r,0.72*PI,2.26*PI)ctx.lineTo(x+l,y)ctx.arc(x+l+r-2,y+l/2,r,1.21*PI,2.78*PI)ctx.lineTo(x+l,y+l)ctx.lineTo(x,y+l)ctx.arc(x+r-2,y+l/2,r+0.4,2.76*PI,1.24*PI,true)ctx.lineTo(x,y)ctx.lineWidth=2ctx.fillStyle='rgba(255,255,255,0.7)'ctx.strokeStyle='rgba(255,255,255,0.7)'ctx.stroke()ctx[operation]()ctx.globalCompositeOperation=isIE?'xor':'overlay'}vargetRandomNumberByRange=function(start,end){returnMath.round(Math.random()*(end-start)+start);};varimg=newImage();img.crossOrigin="Anonymous";varloadCount=0;img.onload=function(){//隨機創建滑塊的位置that.x=getRandomNumberByRange(L+10,that.options.width-(L+10));that.y=getRandomNumberByRange(10+that.options.sliderR*2,that.options.height-(L+10));drawImg(that.canvasCtx,'fill');drawImg(that.blockCtx,'clip');that.canvasCtx.drawImage(img,0,0,that.options.width-2,that.options.height);that.blockCtx.drawImage(img,0,0,that.options.width-2,that.options.height);vary=that.y-that.options.sliderR*2-1;varImageData=that.blockCtx.getImageData(that.x-3,y,L,L);that.block.width=L;that.blockCtx.putImageData(ImageData,0,y);that.text.text(that.text.attr('data-text'));};img.onerror=function(){loadCount++;if(window.location.protocol==='file:'){loadCount=that.options.maxLoadCount;console.error("can'tloadpicresourcefilefromFileprotocal.Pleasetryhttporhttps");}if(loadCount>=that.options.maxLoadCount){that.text.text('加載失敗').addClass('text-danger');return;}img.src=that.options.localImages();};img.setSrc=function(){varsrc='';loadCount=0;that.text.removeClass('text-danger');if($.isFunction(that.options.setSrc))src=that.options.setSrc();if(!src||src==='')src='https://picsum.photos/'+that.options.width+'/'+that.options.height+'/?image='+Math.round(Math.random()*20);if(isIE){//IE瀏覽器無法通過img.crossOrigin跨域,使用ajax獲取圖片blob然后轉為dataURL顯示varxhr=newXMLHttpRequest()xhr.onloadend=function(e){varfile=newFileReader();//FileReader僅支持IE10+file.readAsDataURL(e.target.response);file.onloadend=function(e){img.src=e.target.result;}}xhr.open('GET',src);xhr.responseType='blob';xhr.send();}elseimg.src=src;};img.setSrc();this.text.attr('data-text',this.options.barText);this.text.text(this.options.loadingText);this.img=img};_proto.clean=function(){this.canvasCtx.clearRect(0,0,this.options.width,this.options.height);this.blockCtx.clearRect(0,0,this.options.width,this.options.height);this.block.width=this.options.width;};_proto.bindEvents=function(){varthat=this;this.$element.on('selectstart',function(){returnfalse;});$(this.refreshIcon).on('click',function(){that.text.text(that.options.barText);that.reset();if($.isFunction(that.options.onRefresh))that.options.onRefresh.call(that.$element);});varoriginX,originY,trail=[],isMouseDown=falsevarhandleDragStart=function(e){if(that.text.hasClass('text-danger'))return;originX=e.clientX||e.touches[0].clientX;originY=e.clientY||e.touches[0].clientY;isMouseDown=true;};varhandleDragMove=function(e){if(!isMouseDown)returnfalse;vareventX=e.clientX||e.touches[0].clientX;vareventY=e.clientY||e.touches[0].clientY;varmoveX=eventX-originX;varmoveY=eventY-originY;if(moveX<0||moveX+40>that.options.width)returnfalse;that.slider.style.left=(moveX-1)+'px';varblockLeft=(that.options.width-40-20)/(that.options.width-40)*moveX;that.block.style.left=blockLeft+'px';that.sliderContainer.addClass('sliderContainer_active');that.sliderMask.style.width=(moveX+4)+'px';trail.push(moveY);};varhandleDragEnd=function(e){if(!isMouseDown)returnfalseisMouseDown=falsevareventX=e.clientX||e.changedTouches[0].clientXif(eventX==originX)returnfalsethat.sliderContainer.removeClass('sliderContainer_active');that.trail=trailvar{spliced,verified}=that.verify()if(spliced&&verified){that.sliderContainer.addClass('sliderContainer_success');if($.isFunction(that.options.onSuccess))that.options.onSuccess.call(that.$element);}else{that.sliderContainer.addClass('sliderContainer_fail');if($.isFunction(that.options.onFail))that.options.onFail.call(that.$element);setTimeout(()=>{that.text.text(that.options.failedText);that.reset();},1000);}};this.slider.addEventListener('mousedown',handleDragStart);this.slider.addEventListener('touchstart',handleDragStart);document.addEventListener('mousemove',handleDragMove);document.addEventListener('touchmove',handleDragMove);document.addEventListener('mouseup',handleDragEnd);document.addEventListener('touchend',handleDragEnd);document.addEventListener('mousedown',function(){returnfalse;});document.addEventListener('touchstart',function(){returnfalse;});};_proto.verify=function(){varsum=function(x,y){returnx+y;};varsquare=function(x){returnx*x;};vararr=this.trail//拖動時y軸的移動距離varaverage=arr.reduce(sum)/arr.length;vardeviations=arr.map(function(x){returnx-average;});varstddev=Math.sqrt(deviations.map(square).reduce(sum)/arr.length);varleft=parseInt(this.block.style.left);return{spliced:Math.abs(left-this.x)<this.options.offset,verified:stddev!==0,//簡單驗證下拖動軌跡,為零時表示Y軸上下沒有波動,可能非人為操作}};_proto.reset=function(){this.sliderContainer.removeClass('sliderContainer_failsliderContainer_success');this.slider.style.left=0this.block.style.left=0this.sliderMask.style.width=0this.clean()this.text.attr('data-text',this.text.text());this.text.text(this.options.loadingText);this.img.setSrc();};})(jQuery);
jquery是一個簡潔而快速的JavaScript庫,它具有獨特的鏈式語法和短小清晰的多功能接口、高效靈活的css選擇器,并且可對CSS選擇器進行擴展、擁有便捷的插件擴展機制和豐富的插件,是繼Prototype之后又一個優秀的JavaScript代碼庫,能夠用于簡化事件處理、HTML文檔遍歷、Ajax交互和動畫,以便快速開發網站。
本文由 貴州做網站公司 整理發布,部分圖文來源于互聯網,如有侵權,請聯系我們刪除,謝謝!
c語言中正確的字符常量是用一對單引號將一個字符括起表示合法的字符常量。例如‘a’。數值包括整型、浮點型。整型可用十進制,八進制,十六進制。八進制前面要加0,后面...
2022年天津專場考試原定于3月19日舉行,受疫情影響確定延期,但目前延期后的考試時間推遲。 符合報名條件的考生,須在規定時間登錄招考資訊網(www.zha...
:喜歡聽,樂意看。指很受歡迎?!巴卣官Y料”喜聞樂見:[ xǐ wén lè jiàn ]詳細解釋1. 【解釋】:喜歡聽,樂意看。指很受歡迎。2. 【示例】:這是...
全國統一大市場是什么意思?國內統一大市場指的是在全國范圍內,在充分競爭以及由此形成的社會分工基礎上,各地區市場間、各專業市場間形成了相互依存、相互補充、相互開放、相互協調的有機的市場體系。在這種市場體系下,商品和要素,在各行業、各地區間自由地、無障礙地流通或流動,市場封鎖、地方保護等現象基本消除,從而實現資源在全國范圍內順暢流動和優化配置。就目前來看,引起市場分割的因素有很多,主要包括自然和人為兩...
成交轉化率是什么意思?成交轉化率=店鋪流量/成交量。成交轉化率是體現流量的最好轉化數據。影響轉化率的因素:1.圖片、菜單排序決定顧客下單率。好的餐品圖片可以有效地勾起消費者的食欲從而提高顧客在外賣店鋪的下單轉化率??赡芟M者經常點進一家店,看到菜單之后卻沒有點餐的欲望,又退出去了。首先,你的產品圖片風格需要統一,最好經過專業拍攝,看起來要有食欲。其次,菜單排序的科學性需要考慮,有的店的菜單分類混亂...
傳房產證下崗作廢是真的嗎?對于傳言,當地房管和土地部門已經表示,發放的房產證仍然有效。不動產登記按照“不變”的原則進行,舊證逐步被新證取代。房地產權利變更或轉讓的,發給新的產權人不動產證書;如果不變更或轉讓物權,舊證仍然合法有效,其效力與物權憑證相同,各種手續仍然可以辦理?!恫粍赢a權證書》是指國土資源部制定的房地產登記證,2015年3月1日正式實施,國土資源部制定的房地產登...