html

<br /> jQuery网页验证码插件<br />

数字字母验证码

确定

算数验证码

确定

滑动验证码

拼图验证码

点选验证码

verify.css /*常规验证码*/ .verify-code { font-size: 20px; text-align: center; cursor: pointer; margin-bottom: 5px; border: 1px solid #ddd; }

.cerify-code-panel {
height:100%;
overflow:hidden;
}

.verify-code-area {
float:left;
}

.verify-input-area {
float: left;
width: 60%;
padding-right: 10px;
}
.verify-change-area {
line-height: 30px;
float: left;
}
.varify-input-code {
display:inline-block;
width: 100%;
height: 25px;
}

.verify-change-code {
color: #337AB7;
cursor: pointer;
}

.verify-btn {
width: 200px;
height: 30px;
background-color: #337AB7;
color:#FFFFFF;
border:none;
margin-top: 10px;
}

/滑动验证码/
.verify-bar-area {
position: relative;
background: #FFFFFF;
text-align: center;
-webkit-box-sizing: content-box;
-moz-box-sizing: content-box;
box-sizing: content-box;
border: 1px solid #ddd;
-webkit-border-radius: 4px;
}

.verify-bar-area .verify-move-block {
position: absolute;
top: 0px;
left: 0;
background: #fff;
cursor: pointer;
-webkit-box-sizing: content-box;
-moz-box-sizing: content-box;
box-sizing: content-box;
box-shadow: 0 0 2px #888888;
-webkit-border-radius: 1px;
}

.verify-bar-area .verify-move-block:hover {
background-color: #337ab7;
color: #FFFFFF;
}

.verify-bar-area .verify-left-bar {
position: absolute;
top: -1px;
left: -1px;
background: #f0fff0;
cursor: pointer;
-webkit-box-sizing: content-box;
-moz-box-sizing: content-box;
box-sizing: content-box;
border: 1px solid #ddd;
}

.verify-img-panel {
margin:0;
-webkit-box-sizing: content-box;
-moz-box-sizing: content-box;
box-sizing: content-box;
border: 1px solid #ddd;
border-radius: 3px;
position: relative;
}

.verify-img-panel .verify-refresh {
width: 25px;
height: 25px;
text-align:center;
padding: 5px;
cursor: pointer;
position: absolute;
top: 0;
right: 0;
z-index: 2;
}

.verify-img-panel .icon-refresh {
font-size: 20px;
color: #fff;
}

.verify-img-panel .verify-gap {
background-color: #fff;
position: relative;
z-index: 2;
border:1px solid #fff;
}

.verify-bar-area .verify-move-block .verify-sub-block {
position: absolute;
text-align: center;
z-index: 3;
border: 1px solid #fff;
}

.verify-bar-area .verify-move-block .verify-icon {
font-size: 18px;
}

.verify-bar-area .verify-msg {
z-index : 3;
}

/字体图标的css/
@font-face {font-family: “iconfont”;
src: url(’…/fonts/iconfont.eot?t=1508229193188’); /* IE9*/
src: url(’…/fonts/iconfont.eot?t=1508229193188#iefix’) format(‘embedded-opentype’), /* IE6-IE8 /
url(‘data:application/x-font-woff;charset=utf-8;base64,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’) format(‘woff’),
url(’…/fonts/iconfont.ttf?t=1508229193188’) format(‘truetype’), /
chrome, firefox, opera, Safari, Android, iOS 4.2+/
url(’…/fonts/iconfont.svg?t=1508229193188#iconfont’) format(‘svg’); /
iOS 4.1- */
}

.iconfont {
font-family:“iconfont” !important;
font-size:16px;
font-style:normal;
-webkit-font-smoothing: antialiased;
-moz-osx-font-smoothing: grayscale;
}

.icon-check:before { content: “\e645”; }

.icon-close:before { content: “\e646”; }

.icon-right:before { content: “\e6a3”; }

.icon-refresh:before { content: “\e6a4”; }
verify.js
/! Verify-v0.1.0 MIT License by 大熊/

;(function($, window, document,undefined) {

//定义Code的构造函数
var Code = function(ele, opt) {this.$element = ele,this.defaults = {type : 1,figure : 100,  //位数,仅在type=2时生效arith : 0,   //算法,支持加减乘,0为随机,仅在type=2时生效width : '200px',height : '60px',fontSize : '30px',codeLength : 6,btnId : 'check-btn',ready : function(){},success : function(){},error : function(){}},this.options = $.extend({}, this.defaults, opt)
};
var _code_chars = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 'a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v','w','x','y','z','A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z'];
var _code_color1 = ['#fffff0', '#f0ffff', '#f0fff0', '#fff0f0'];
var _code_color2 = ['#FF0033', '#006699', '#993366', '#FF9900', '#66CC66', '#FF33CC'];//定义Code的方法
Code.prototype = {init : function() {var _this = this;this.loadDom();this.setCode();this.options.ready();this.$element[0].onselectstart = document.body.ondrag = function(){return false;};//点击验证码this.$element.find('.verify-code, .verify-change-code').on('click', function() {_this.setCode();});//确定的点击事件this.htmlDoms.code_btn.on('click', function() {_this.checkCode();});},//加载页面loadDom : function() {var panelHtml = '<div class="cerify-code-panel">\<div class="verify-code"></div>\<div class="verify-code-area">\<div class="verify-input-area">\<input type="text" class="varify-input-code"/>\</div>\<div class="verify-change-area">\<a class="verify-change-code">换一张</a>\</div>\</div>\</div>';this.$element.append(panelHtml);this.htmlDoms = {code_btn : $('#'+this.options.btnId),code : this.$element.find('.verify-code'),code_area : this.$element.find('.verify-code-area'),code_input : this.$element.find('.varify-input-code'),};this.htmlDoms.code.css({'width':this.options.width, 'height':this.options.height,'line-height':this.options.height, 'font-size':this.options.fontSize});this.htmlDoms.code_area.css({'width':this.options.width});},//设置验证码setCode : function() {var color1Num = Math.floor(Math.random() * 3);var color2Num = Math.floor(Math.random() * 5);this.htmlDoms.code.css({'background-color': _code_color1[color1Num], 'color': _code_color2[color2Num]});this.htmlDoms.code_input.val('');var code = '';this.code_chose = '';if(this.options.type == 1) {  //普通验证码for(var i = 0; i < this.options.codeLength; i++) {var charNum = Math.floor(Math.random() * 52);var tmpStyle = (charNum%2 ==0)? "font-style:italic;margin-right: 10px;":"font-weight:bolder;";tmpStyle += (Math.floor(Math.random() * 2) == 1)? "font-weight:bolder;":"";this.code_chose += _code_chars[charNum];code += '<font style="'+tmpStyle+'">'+_code_chars[charNum]+'</font>';}}else {     //算法验证码var num1 = Math.floor(Math.random() * this.options.figure);var num2 = Math.floor(Math.random() * this.options.figure);if(this.options.arith == 0) {var tmparith = Math.floor(Math.random() * 3);}switch(tmparith) {case 1 :this.code_chose = parseInt(num1) + parseInt(num2);code = num1 + ' + ' + num2 + ' = ?';break;case 2 :if(parseInt(num1) < parseInt(num2)) {var tmpnum = num1;num1 = num2;num2 = tmpnum;}this.code_chose = parseInt(num1) - parseInt(num2);code = num1 + ' - ' + num2 + ' = ?';break;default :this.code_chose = parseInt(num1) * parseInt(num2);code = num1 + ' × ' + num2 + ' = ?';break;}}this.htmlDoms.code.html(code);},//比对验证码checkCode : function() {if(this.options.type == 1) {       //普通验证码var own_input = this.htmlDoms.code_input.val().toUpperCase();this.code_chose = this.code_chose.toUpperCase();}else {var own_input = this.htmlDoms.code_input.val();}if(own_input == this.code_chose) {this.options.success();}else {this.options.error();this.setCode();}}
};//定义Slide的构造函数
var Slide = function(ele, opt) {this.$element = ele,this.defaults = {type : 1,vOffset: 5,vSpace : 5,imgName : ['1.jpg', '2.jpg'],imgSize : {width: '400px',height: '200px',},blockSize : {width: '50px',height: '50px',},barSize : {width : '400px',height : '40px',},ready : function(){},success : function(){},error : function(){}},this.options = $.extend({}, this.defaults, opt)
};//定义Slide的方法
Slide.prototype = {init: function() {var _this = this;//加载页面this.loadDom();this.options.ready();this.$element[0].onselectstart = document.body.ondrag = function(){return false;};//按下this.htmlDoms.move_block.on('touchstart', function(e) {_this.start(e);});this.htmlDoms.move_block.on('mousedown', function(e) {_this.start(e);});//拖动window.addEventListener("touchmove", function(e) {_this.move(e);});window.addEventListener("mousemove", function(e) {_this.move(e);});//鼠标松开window.addEventListener("touchend", function() {_this.end();});window.addEventListener("mouseup", function() {_this.end();});//刷新_this.$element.find('.verify-refresh').on('click', function() {_this.refresh();});},//初始化加载loadDom : function() {this.img_rand = Math.floor(Math.random() * this.options.imgName.length);           //随机的背景图片var panelHtml = '';var tmpHtml = '';if(this.options.type != 1) {       //图片滑动panelHtml += '<div class="verify-img-panel">\<div class="verify-refresh">\<i class="iconfont icon-refresh"></i>\</div>\<div class="verify-gap"></div>\</div>';tmpHtml = '<div class="verify-sub-block"></div>';}panelHtml += '<div class="verify-bar-area">\<span class="verify-msg">向右滑动完成验证</span>\<div class="verify-left-bar">\<span class="verify-msg"></span>\<div  class="verify-move-block">\<i  class="verify-icon iconfont icon-right"></i>'+tmpHtml+'</div></div></div>';this.$element.append(panelHtml);this.htmlDoms = {gap : this.$element.find('.verify-gap'),sub_block : this.$element.find('.verify-sub-block'),img_panel : this.$element.find('.verify-img-panel'),bar_area : this.$element.find('.verify-bar-area'),move_block : this.$element.find('.verify-move-block'),left_bar : this.$element.find('.verify-left-bar'),msg : this.$element.find('.verify-msg'),icon : this.$element.find('.verify-icon'),refresh :this.$element.find('.verify-refresh')};this.status = false; //鼠标状态this.setSize = this.resetSize(this);  //重新设置宽度高度this.htmlDoms.gap.css({'width': this.options.blockSize.width, 'height': this.options.blockSize.height});this.htmlDoms.sub_block.css({'width': this.options.blockSize.width, 'height': this.options.blockSize.height});this.htmlDoms.img_panel.css({'width': this.setSize.img_width, 'height': this.setSize.img_height, 'background': 'url(images/'+this.options.imgName[this.img_rand]+')', 'background-size' : this.setSize.img_width + ' '+ this.setSize.img_height});this.htmlDoms.bar_area.css({'width': this.setSize.bar_width, 'height': this.options.barSize.height, 'line-height':this.options.barSize.height});this.htmlDoms.move_block.css({'width': this.options.barSize.height, 'height': this.options.barSize.height});this.htmlDoms.left_bar.css({'width': this.options.barSize.height, 'height': this.options.barSize.height});this.randSet();},//鼠标按下start: function(e) {this.htmlDoms.msg.text('');this.htmlDoms.move_block.css('background-color', '#337ab7');this.htmlDoms.left_bar.css('border-color', '#337AB7');this.htmlDoms.icon.css('color', '#fff');e.stopPropagation();this.status = true;},//鼠标移动move: function(e) {if(this.status) {if(!e.touches) {    //兼容移动端var x = e.clientX;}else {     //兼容PC端var x = e.touches[0].pageX;}var bar_area_left = Slide.prototype.getLeft(this.htmlDoms.bar_area[0]);var move_block_left = x - bar_area_left; //小方块相对于父元素的left值if(this.options.type != 1) {        //图片滑动if(move_block_left >= this.htmlDoms.bar_area[0].offsetWidth - parseInt(parseInt(this.options.blockSize.width)/2) - 2) {move_block_left = this.htmlDoms.bar_area[0].offsetWidth - parseInt(parseInt(this.options.blockSize.width)/2) - 2;}}else {       //普通滑动if(move_block_left >= this.htmlDoms.bar_area[0].offsetWidth - parseInt(parseInt(this.options.barSize.height)/2) + 3) {this.$element.find('.verify-msg:eq(1)').text('松开验证');move_block_left = this.htmlDoms.bar_area[0].offsetWidth - parseInt(parseInt(this.options.barSize.height)/2) + 3;}else {this.$element.find('.verify-msg:eq(1)').text('');}}if(move_block_left <= 0) {move_block_left = parseInt(parseInt(this.options.blockSize.width)/2);}//拖动后小方块的left值this.htmlDoms.move_block.css('left', move_block_left-parseInt(parseInt(this.options.blockSize.width)/2) + "px");this.htmlDoms.left_bar.css('width', move_block_left-parseInt(parseInt(this.options.blockSize.width)/2) + "px");}},//鼠标松开end: function() {var _this = this;//判断是否重合if(this.status) {if(this.options.type != 1) {      //图片滑动var vOffset = parseInt(this.options.vOffset);if(parseInt(this.htmlDoms.gap.css('left')) >= (parseInt(this.htmlDoms.move_block.css('left')) - vOffset) && parseInt(this.htmlDoms.gap.css('left')) <= (parseInt(this.htmlDoms.move_block.css('left')) + vOffset)) {this.htmlDoms.move_block.css('background-color', '#5cb85c');this.htmlDoms.left_bar.css({'border-color': '#5cb85c', 'background-color': '#fff'});this.htmlDoms.icon.css('color', '#fff');this.htmlDoms.icon.removeClass('icon-right');this.htmlDoms.icon.addClass('icon-check');this.htmlDoms.refresh.hide();this.htmlDoms.move_block.unbind('mousedown touchstart');this.options.success();}else{this.htmlDoms.move_block.css('background-color', '#d9534f');this.htmlDoms.left_bar.css('border-color', '#d9534f');this.htmlDoms.icon.css('color', '#fff');this.htmlDoms.icon.removeClass('icon-right');this.htmlDoms.icon.addClass('icon-close');setTimeout(function () {_this.htmlDoms.move_block.animate({'left':'0px'}, 'fast');_this.htmlDoms.left_bar.animate({'width': '40px'}, 'fast');_this.htmlDoms.left_bar.css({'border-color': '#ddd'});_this.htmlDoms.move_block.css('background-color', '#fff');_this.htmlDoms.icon.css('color', '#000');_this.htmlDoms.icon.removeClass('icon-close');_this.htmlDoms.icon.addClass('icon-right');_this.$element.find('.verify-msg:eq(0)').text('向右滑动完成验证');}, 400);this.options.error();}}else {       //普通滑动if(parseInt(this.htmlDoms.move_block.css('left')) >= (parseInt(this.setSize.bar_width) - parseInt(this.options.barSize.height) - parseInt(this.options.vOffset))) {this.htmlDoms.move_block.css('background-color', '#5cb85c');this.htmlDoms.left_bar.css({'color': '#4cae4c', 'border-color': '#5cb85c', 'background-color': '#fff' });this.htmlDoms.icon.css('color', '#fff');this.htmlDoms.icon.removeClass('icon-right');this.htmlDoms.icon.addClass('icon-check');this.htmlDoms.refresh.hide();this.htmlDoms.move_block.unbind('mousedown');this.htmlDoms.move_block.unbind('touchstart');this.$element.find('.verify-msg:eq(1)').text('验证成功');this.options.success();}else {this.htmlDoms.move_block.css('background-color', '#d9534f');this.htmlDoms.left_bar.css('border-color', '#d9534f');this.htmlDoms.icon.css('color', '#fff');this.htmlDoms.icon.removeClass('icon-right');this.htmlDoms.icon.addClass('icon-close');setTimeout(function () {_this.htmlDoms.move_block.animate({'left':'0px'}, 'fast');_this.htmlDoms.left_bar.animate({'width': '40px'}, 'fast');_this.htmlDoms.left_bar.css({'border-color': '#ddd'});_this.htmlDoms.move_block.css('background-color', '#fff');_this.htmlDoms.icon.css('color', '#000');_this.htmlDoms.icon.removeClass('icon-close');_this.htmlDoms.icon.addClass('icon-right');_this.$element.find('.verify-msg:eq(0)').text('向右滑动解锁');}, 400);this.options.error();}}this.status = false;}},resetSize : function(obj) {var img_width,img_height,bar_width,bar_height;  //图片的宽度、高度,移动条的宽度、高度var parentWidth = obj.$element.parent().width() || $(window).width();var parentHeight = obj.$element.parent().height() || $(window).height();if(obj.options.imgSize.width.indexOf('%')!= -1){img_width = parseInt(obj.options.imgSize.width)/100 * parentWidth + 'px';}else {img_width = obj.options.imgSize.width;}if(obj.options.imgSize.height.indexOf('%')!= -1){img_height = parseInt(obj.options.imgSize.height)/100 * parentHeight + 'px';}else {img_height = obj.options.imgSize.height;}if(obj.options.barSize.width.indexOf('%')!= -1){bar_width = parseInt(obj.options.barSize.width)/100 * parentWidth + 'px';}else {bar_width = obj.options.barSize.width;}if(obj.options.barSize.height.indexOf('%')!= -1){bar_height = parseInt(obj.options.barSize.height)/100 * parentHeight + 'px';}else {bar_height = obj.options.barSize.height;}return {img_width : img_width, img_height : img_height, bar_width : bar_width, bar_height : bar_height};},//随机出生点位randSet: function() {var rand1 = Math.floor(Math.random()*9+1);var rand2 = Math.floor(Math.random()*9+1);var top = rand1 * parseInt(this.setSize.img_height)/15 + parseInt(this.setSize.img_height) * 0.1;var left = rand2 * parseInt(this.setSize.img_width)/15 + parseInt(this.setSize.img_width) * 0.1;this.$element.find('.verify-img-panel').css('margin-bottom', this.options.vSpace + 'px');this.$element.find('.verify-gap').css({'top': top, 'left': left});this.$element.find('.verify-sub-block').css({'top':'-'+(parseInt(this.setSize.img_height)- top + this.options.vSpace + 2)+'px', 'background-image': 'url(images/'+this.options.imgName[this.img_rand]+')', 'background-size': this.setSize.img_width + ' '+ this.setSize.img_height,'background-position-y': '-'+top+ 'px', 'background-position-x': '-'+left+'px'});},//刷新refresh: function() {this.randSet();this.img_rand = Math.floor(Math.random() * this.options.imgName.length);          //随机的背景图片this.$element.find('.verify-img-panel').css({'background': 'url(images/'+this.options.imgName[this.img_rand]+')', 'background-size': this.setSize.img_width + ' '+ this.setSize.img_height});this.$element.find('.verify-sub-block').css({'background-image': 'url(images/'+this.options.imgName[this.img_rand]+')', 'background-size': this.setSize.img_width + ' '+ this.setSize.img_height});},//获取left值getLeft: function(node) {var left = $(node).offset().left;

// var nowPos = node.offsetParent;
//
// while(nowPos != null) {  
// left += $(nowPos).offset().left; 
// nowPos = nowPos.offsetParent;  
// }
return left;
}
};

//定义Points的构造函数
var Points = function(ele, opt) {this.$element = ele,this.defaults = {defaultNum : 4,   //默认的文字数量checkNum : 3,  //校对的文字数量vSpace : 5,    //间隔imgName : ['1.jpg', '2.jpg'],imgSize : {width: '400px',height: '200px',},barSize : {width : '400px',height : '40px',},ready : function(){},success : function(){},error : function(){}},this.options = $.extend({}, this.defaults, opt)
};//定义Points的方法
Points.prototype = {init : function() {var _this = this;//加载页面_this.loadDom();_this.refresh();_this.options.ready();this.$element[0].onselectstart = document.body.ondrag = function(){return false;};//点击事件比对_this.$element.find('.verify-img-panel canvas').on('click', function(e) {_this.checkPosArr.push(_this.getMousePos(this, e));if(_this.num == _this.options.checkNum) {_this.num = _this.createPoint(_this.getMousePos(this, e));setTimeout(function () {var flag = _this.comparePos(_this.fontPos, _this.checkPosArr);if(flag == false) {  //验证失败_this.options.error();_this.$element.find('.verify-bar-area').css({'color': '#d9534f', 'border-color': '#d9534f'});_this.$element.find('.verify-msg').text('验证失败');setTimeout(function () {_this.$element.find('.verify-bar-area').css({'color': '#000','border-color': '#ddd'});_this.refresh();}, 400);}else {  //验证成功_this.$element.find('.verify-bar-area').css({'color': '#4cae4c', 'border-color': '#5cb85c'});_this.$element.find('.verify-msg').text('验证成功');_this.$element.find('.verify-refresh').hide();_this.$element.find('.verify-img-panel').unbind('click');_this.options.success();}}, 400);}if(_this.num < _this.options.checkNum) {_this.num = _this.createPoint(_this.getMousePos(this, e));}});//刷新_this.$element.find('.verify-refresh').on('click', function() {_this.refresh();});},//加载页面loadDom : function() {this.fontPos = []; //选中的坐标信息this.checkPosArr = []; //用户点击的坐标this.num = 1;  //点击的记数this.img_rand = Math.floor(Math.random() * this.options.imgName.length);         //随机的背景图片var panelHtml = '';var tmpHtml = '';this.setSize = Slide.prototype.resetSize(this);    //重新设置宽度高度panelHtml += '<div class="verify-img-panel"><div  class="verify-refresh" style="z-index:9999"><i class="iconfont icon-refresh"></i></div><canvas width="'+this.setSize.img_width+'" height="'+this.setSize.img_height+'"></canvas></div><div class="verify-bar-area"><span  class="verify-msg"></span></div>';this.$element.append(panelHtml);this.htmlDoms = {img_panel : this.$element.find('.verify-img-panel'),bar_area : this.$element.find('.verify-bar-area'),msg : this.$element.find('.verify-msg'),};this.htmlDoms.img_panel.css({'width': this.setSize.img_width, 'height': this.setSize.img_height, 'background-size' : this.setSize.img_width + ' '+ this.setSize.img_height, 'margin-bottom': this.options.vSpace + 'px'});this.htmlDoms.bar_area.css({'width': this.options.barSize.width, 'height': this.options.barSize.height, 'line-height':this.options.barSize.height});},//绘制合成的图片drawImg : function(obj, img) {//准备canvas环境var canvas = this.$element.find('canvas')[0];//var canvas=document.getElementById("myCanvas");var ctx=canvas.getContext("2d");// 绘制图片ctx.drawImage(img,0,0, parseInt(this.setSize.img_width), parseInt(this.setSize.img_height));// 绘制水印var fontSizeArr = ['italic small-caps bold 20px microsoft yahei', 'small-caps normal 25px arial', '34px microsoft yahei'];var fontStr = '天地玄黄宇宙洪荒日月盈昃辰宿列张寒来暑往秋收冬藏闰余成岁律吕调阳云腾致雨露结为霜金生丽水玉出昆冈剑号巨阙珠称夜光果珍李柰菜重芥姜海咸河淡鳞潜羽翔龙师火帝鸟官人皇始制文字乃服衣裳推位让国有虞陶唐吊民伐罪周发殷汤坐朝问道垂拱平章爱育黎首臣伏戎羌遐迩体率宾归王';  //不重复的汉字var fontChars = [];var avg = Math.floor(parseInt(this.setSize.img_width)/(parseInt(this.options.defaultNum)+1));var tmp_index = '';var color2Num = Math.floor(Math.random() * 5);for(var i = 1; i <= this.options.defaultNum; i++) {fontChars[i-1] = this.getChars(fontStr, fontChars);tmp_index = Math.floor(Math.random()*3);ctx.font = fontSizeArr[tmp_index];ctx.fillStyle = _code_color2[color2Num];if(Math.floor(Math.random() * 2) == 1) {var tmp_y = Math.floor(parseInt(this.setSize.img_height)/2) + tmp_index*20 + 20;}else {var tmp_y = Math.floor(parseInt(this.setSize.img_height)/2) - tmp_index*20;}ctx.fillText(fontChars[i-1],avg * i, tmp_y);this.fontPos[i-1] = {'char': fontChars[i-1], 'x': avg * i, 'y': tmp_y};}for(var i = 0; i < (this.options.defaultNum-this.options.checkNum); i++) {this.shuffle(this.fontPos).pop();}var msgStr = '';for(var i = 0; i < this.fontPos.length; i++) {msgStr += this.fontPos[i].char + ',';}this.htmlDoms.msg.text('请顺序点击【' + msgStr.substring(0,msgStr.length-1) + '】');return this.fontPos;},//获取坐标getMousePos :function(obj, event) {var e = event || window.event;var scrollX = document.documentElement.scrollLeft || document.body.scrollLeft;var scrollY = document.documentElement.scrollTop || document.body.scrollTop;var x = e.clientX - ($(obj).offset().left - $(window).scrollLeft());var y = e.clientY - ($(obj).offset().top - $(window).scrollTop());return {'x': x, 'y': y};},//递归去重getChars : function(fontStr, fontChars) {var tmp_rand = parseInt(Math.floor(Math.random() * fontStr.length));if(tmp_rand > 0) {tmp_rand = tmp_rand - 1;}tmp_char = fontStr.charAt(tmp_rand);if($.inArray(tmp_char, fontChars) == -1) {return tmp_char;}else {return Points.prototype.getChars(fontStr, fontChars);}},//洗牌数组shuffle : function(arr) {var m = arr.length, i;while (m) {i = (Math.random() * m--) >>> 0;[arr[m], arr[i]] = [arr[i], arr[m]]}return arr;},//创建坐标点createPoint : function (pos) {this.htmlDoms.img_panel.append('<div class="point-area" style="background-color:#1abd6c;color:#fff;z-index:9999;width:30px;height:30px;text-align:center;line-height:30px;border-radius: 50%;position:absolute;top:'+parseInt(pos.y-10)+'px;left:'+parseInt(pos.x-10)+'px;">'+this.num+'</div>');return ++this.num;},//比对坐标点comparePos : function (fontPos, checkPosArr) {var flag = true;for(var i = 0; i < fontPos.length; i++) {if(!(parseInt(checkPosArr[i].x) + 40 > fontPos[i].x && parseInt(checkPosArr[i].x) - 40 < fontPos[i].x && parseInt(checkPosArr[i].y) + 40 > fontPos[i].y && parseInt(checkPosArr[i].y) - 40 < fontPos[i].y)) {flag = false;break;}}return flag;},//刷新refresh: function() {var _this = this;this.$element.find('.point-area').remove();this.fontPos = [];this.checkPosArr = [];this.num = 1;this.img_rand = Math.floor(Math.random() * this.options.imgName.length);          //随机的背景图片var img = new Image();img.src = 'images/'+this.options.imgName[this.img_rand];// 加载完成开始绘制$(img).on('load', function(e) {this.fontPos = _this.drawImg(_this, this);});},};//在插件中使用codeVerify对象
$.fn.codeVerify = function(options, callbacks) {var code = new Code(this, options);code.init();
};//在插件中使用slideVerify对象
$.fn.slideVerify = function(options, callbacks) {var slide = new Slide(this, options);slide.init();
};//在插件中使用clickVerify对象
$.fn.pointsVerify = function(options, callbacks) {var points = new Points(this, options);points.init();
};

})(jQuery, window, document);

比较全的jQuery网页验证码插件相关推荐

  1. jQuery幻灯片skitter-slider插件学习总结

    @(关键词)[skitter|jquery|网页幻灯片|slider] Skitter 是一个非常酷炫的jQuery网页幻灯片插件,支持非常多种酷炫幻灯片切换方式,下载前往官网,另有参考文档 下面简单 ...

  2. 5款实用的jQuery验证码插件(附js,jQuery代码)

    5款实用的jQuery验证码插件 5款实用的jQuery验证码插件分享给大家,分别有普通字母数字验证码.运算验证码.滑动验证码.点选验证码,纯前端的网页验证码代码. 在线演示地址:5款实用的jQuer ...

  3. 超全jquery网页特效素材网站整理

    天天各大网站找jquery网页特效素材?最后空手而归?今天为大家推荐jquery网页特效素材网站,质量上乘适合资源慌缺的你,话不多说准备开始收藏吧! 免费资源最多,又全面的网站,我找到啦!!它有很多素 ...

  4. php+js实现弹幕,jquery.barrager.js-专业的网页弹幕插件

    jquery.barrager.js是一款专业的网页弹幕插件.它支持显示图片,文字以及超链接.支持自定义弹幕的速度.高度.颜色.数量等.能轻松集成到论坛,博客等网站中. 由于IE9以下的IE浏览器不兼 ...

  5. 强大的jQuery幻灯片播放插件 支持全拼、拖拽和下载等功能

    强大的jQuery幻灯片播放插件 支持全拼.拖拽和下载等功能 在线演示 本地下载 posted @ 2018-11-29 11:30 栖息地 阅读(...) 评论(...) 编辑 收藏

  6. 5款实用的jQuery验证码插件

    效果图 文档结构 HTML <!DOCTYPE html> <html><head><metacharset="UTF-8">< ...

  7. 25+ 个 jQuery 网页拖放操作的插件

    这篇文章为你介绍27个jQuery插件,使得你的Web前端具备拖放操作的能力. Ajax Upload 提供文件拖放上传,并显示上传进度 Drop n' Save – Drag & Drop ...

  8. TaggingJS – 可以灵活定制的 jQuery 标签系统插件

    TaggingJS 是一款 jQuery 插件,用来创建高度可定制的前端标签系统.这款插件不到3KB ,支持主流浏览器.有几种方法来定制 TaggingJS 的默认行为:一是使用  custom_op ...

  9. 精心挑选的23款美轮美奂的 jQuery 图片特效插件

    jQuery是一个非常优秀的 JavaScript 框架,使用简单灵活,同时还有许多成熟的插件可供选择.其中,jQuery 最令人印象深刻的应用之一就是对图片的处理,它可以让帮助你在你的项目中加入各种 ...

最新文章

  1. UI组件库从1到N开发心得-组件篇
  2. 【渝粤题库】国家开放大学2021春2718动物生理基础题目
  3. JAVA并发七(多线程环境中安全使用集合API)
  4. c语言实验题——字符串排序,C语言中实现“三个数由小到大排序”的多种方法浅析...
  5. 首届(2017)中国·呼和浩特创新创业创意大赛·华东分站赛在乌镇成功举办
  6. MySQL数据库进阶(API的理解、Python对MySQL的接口)
  7. (c语言)求x的y次方
  8. [转载] java 中 date类型详解
  9. set,env,export,set -x,set -e;
  10. 基于VM10+Win7安装Mac OSX10.11 El Capitan
  11. ws2812b灯带容易坏_树莓派控制WS2812B灯带 - Python
  12. 腾讯广告算法大赛(即腾讯社交广告算法大赛)
  13. 一阶电路实验报告心得_电路实验心得体会范文3篇
  14. 12 图浅析人口分布对经济趋势的影响
  15. 中国芯片设计云技术白皮书2.0发布
  16. QT的文件过滤器qt选择文件时候的文件过滤
  17. 去中心化的前端构建工具 — Vite
  18. xshell的复制ssh渠道和复制会话是什么意思
  19. 获取推荐商品列表(淘宝)
  20. Jedis——连接池

热门文章

  1. 元宇宙是一个美丽神话还是下一代互联网的终极形态?
  2. 个性与定制为王:下一代互联网和下一代门户
  3. JS+Flash 图片轮播
  4. 神经网络和深度学习(5)-- 逻辑回归
  5. 进化算法——约束优化
  6. Samtec科普 | 患者护理应用连接器详解
  7. 中国风动态PPT模板
  8. oracle的ocr是什么意思,Oracle11gR2——RAC中的表決磁盤、OCR與OLR
  9. 计算机组成原理12——冒险和预测
  10. 用Google日历可以加速团队内部信息共享速度