/**
* Created by lgy on 2017/10/21. 图片验证码
*/
(function($) {
$.fn.imgcode = function(options) {
// 初始化参数
var defaults = {
frontimg : "",
backimg : "",
refreshImg : "",
getsuccess : "",
getfail : "",
maskclose : true,
callback : "", // 回调函数
refreshcallback : "",
yHeight : 1
};
var opts = $.extend(defaults, options);
return this
.each(function() {
var $this = $(this);// 获取当前对象
var html = '
'
+ '
'
+ '
'
+ '
'
+ '
'
+ '
'
+ '
'
+ '
刷新
'
+ '
' + '
'
+ '
'
+ '
按住滑块,拖动完成上方拼图'
+ '
';
$this.html(html);
$(".code-mask").css("margin-top",opts.yHeight+"px")
// 定义拖动参数
var $divMove = $(this).find(".code-btn-img"); // 拖动按钮
var $divWrap = $(this).find(".code-btn");// 鼠标可拖拽区域
var mX = 0, mY = 0;// 定义鼠标X轴Y轴
var dX = 0, dY = 0;// 定义滑动区域左、上位置
var isDown = false;// mousedown标记
if (document.attachEvent) {// ie的事件监听,拖拽div时禁止选中内容,firefox与chrome已在css中设置过-moz-user-select:
// none; -webkit-user-select:
// none;
$divMove[0].attachEvent('onselectstart', function() {
return false;
});
}
// 按钮拖动事件
$divMove.unbind('mousedown').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"
});
}
});
// 点击背景关闭
if (opts.maskclose) {
$this.find(".code_bg").unbind('click').click(
function() {
$this.html("");
})
}
// 刷新code码
$this.find(".icon-push").unbind('click').click(function() {
opts.refreshcallback();
});
// 鼠标点击松手事件
$divMove.unbind('mouseup')
.mouseup(
function(e) {
console.log(e)
var lastX = $this.find(".code-mask")
.offset().left
- dX - 1;
isDown = false;// 鼠标拖拽启
$divMove.removeClass("active");
// 还原按钮阴影
$divMove.css({
"box-shadow" : "0 0 3px #ccc"
});
returncode(lastX);
});
// 滑动事件
$divWrap
.mousemove(function(event) {
var event = event || window.event;
var x = event.pageX;// 鼠标滑动时的X轴
if (isDown) {
if (x > (dX + 20)
&& x < dX + $(this).width() - 20) {
$divMove.css({
"left" : (x - dX - 20) + "px"
});// div动态位置赋值
$this.find(".code-mask").css({
"left" : (x - dX - 20) + "px"
});
}
}
});
// 返回坐标系
function returncode(xpos) {
opts.callback({
xpos : xpos
});
}
// 验证数据
function checkcode(code) {
var iscur = true;
// 模拟ajax
setTimeout(function() {
if (iscur) {
checkcoderesult(1, "验证通过");
$this.find(".code-k-div").remove();
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);
}, 300);
}
}, 500)
}
// 刷新图标
opts.refreshImg = function(data) {
console.log(data)
$this.find(".code-img-con .code-front-img").attr("src",
data.frontImg);
$this.find(".code-img-con .code-back-img").attr("src",
data.backGoundImg);
}
// 验证成功
opts.getsuccess = function() {
checkcoderesult(1, "验证通过");
setTimeout(function() {
$this.find(".code-k-div").remove();
}, 800);
}
// 验证失败
opts.getfail = function(txt) {
$divMove.addClass("error");
checkcoderesult(0, txt);
setTimeout(function() {
$divMove.removeClass("error");
$this.find(".code-mask").animate({
"left" : "0px"
}, 200);
$divMove.animate({
"left" : "10px"
}, 200);
}, 400);
}
// 验证结果
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);