/*! 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);
|