(function(global, factory) {
typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :
typeof define === 'function' && define.amd ? define(factory) :
(window.slideVerifyPlug = factory());
}(this, (function() {
'use strict';
var SlideVerify = function(ele, opt) {
this.$ele = $(ele);
//默认参数
this.defaults = {
initText: '请按住滑块,拖动到最右边',
sucessText: '验证通过',
getSuccessState: function() {
}
}
this.settings = $.extend({}, this.defaults, opt);
this.touchX = 0;
this.slideFinishState = false;
this.init();
}
SlideVerify.prototype = {
constructor: SlideVerify,
init: function() {
var _this = this;
_this.initDom();
_this.initStyle();
_this.initEle();
_this._mousedown();
_this._mouseup();
_this._touchstart();
_this._touchmove();
_this._touchend();
},
initDom: function() {
var html = $(
'
' +
'
' +
'' +
'' +
'' +
this.settings.initText +
'' +
'' +
this.settings.sucessText +
'');
this.$ele.append(html);
},
initStyle: function() {
if (this.settings.wrapWidth) {
this.$ele.css({
'width': this.settings.wrapWidth
})
} else {
this.$ele.css({
'width': '100%'
})
}
},
initEle: function() {
this.slideBtn = this.$ele.find('.dragBtn');
this.slideProEle = this.$ele.find('.dragProgress');
this.slideSucMsgEle = this.$ele.find('.sucMsg');
this.slideFixTipsEle = this.$ele.find('.fixTips');
this.maxSlideWid = this.calSlideWidth();
},
_mousedown: function() {
var _this = this;
var ifThisMousedown = false;
_this.slideBtn.on('mousedown', function(e) {
var distenceX = e.pageX;
e.preventDefault();
if (_this.slideFinishState || _this.ifAnimated()) {
return false;
}
ifThisMousedown = true;
$(document).mousemove(function(e) {
if (!ifThisMousedown) {
return false;
}
var curX = e.pageX - distenceX;
if (curX >= _this.maxSlideWid) {
_this.setDragBtnSty(_this.maxSlideWid);
_this.setDragProgressSty(_this.maxSlideWid);
_this.cancelMouseMove();
_this.slideFinishState = true;
if (_this.settings.getSuccessState) {
_this.settings.getSuccessState(_this.slideFinishState);
}
_this.successSty();
} else if (curX <= 0) {
_this.setDragBtnSty('0');
_this.setDragProgressSty('0');
} else {
_this.setDragBtnSty(curX);
_this.setDragProgressSty(curX);
}
})
$(document).mouseup(function() {
if (!ifThisMousedown) {
return false;
}
ifThisMousedown = false;
if (_this.slideFinishState) {
_this.cancelMouseMove();
return false;
} else {
_this.failAnimate();
_this.cancelMouseMove();
}
});
})
},
_mouseup: function() {
},
_touchstart: function() {
var _this = this;
_this.slideBtn.on('touchstart', function(e) {
_this.touchX = e.originalEvent.targetTouches[0].pageX;
if (_this.slideFinishState || _this.ifAnimated()) {
// _this.cancelTouchmove();
return false;
}
})
},
_touchmove: function() {
var _this = this;
_this.slideBtn.on('touchmove', function(e) {
e.preventDefault();
var curX = e.originalEvent.targetTouches[0].pageX - _this.touchX;
if (curX >= _this.maxSlideWid) {
_this.setDragBtnSty(_this.maxSlideWid);
_this.setDragProgressSty(_this.maxSlideWid);
_this.cancelTouchmove();
_this.successSty();
_this.slideFinishState = true;
if (_this.settings.getSuccessState) {
_this.settings.getSuccessState(_this.slideFinishState);
}
_this.slideFinishState = true;
} else if (curX <= 0) {
_this.setDragBtnSty('0');
_this.setDragProgressSty('0');
} else {
_this.setDragBtnSty(curX);
_this.setDragProgressSty(curX);
}
})
},
_touchend: function() {
var _this = this;
_this.slideBtn.on('touchend', function() {
if (_this.slideFinishState) {
_this.cancelTouchmove();
return false;
} else {
_this.failAnimate();
}
})
},
getDragBtnWid: function() { //获取滑块的宽度,
return parseInt(this.slideBtn.width());
},
getDragWrapWid: function() { //获取 本容器的的宽度,以防万一
return parseFloat(this.$ele.outerWidth());
},
calSlideWidth: function() {
var _this = this;
return _this.getDragWrapWid() - _this.getDragBtnWid()
},
ifAnimated: function() { //判断 是否动画状态
return this.slideBtn.is(":animated")
},
getDragBtnLeft: function() { //判断当前 按钮 离左侧的距离
return this.slideBtn.css('left');
},
ifSlideRight: function() {
var _this = this;
if (parseInt(_this.getDragBtnLeft()) == parseInt(_this.calSlideWidth())) {
return true;
} else {
return false;
}
},
setDragBtnSty: function(left) {
this.slideBtn.css({
'left': left
})
},
setDragProgressSty: function(wid) {
this.slideProEle.css({
'width': wid
})
},
cancelMouseMove: function() {
$(document).off('mousemove');
},
cancelTouchmove: function() {
this.slideBtn.off('touchmove');
},
successSty: function() {
this.slideSucMsgEle.show();
this.slideBtn.addClass('suc-drag-btn');
},
failAnimate: function() {
this.slideBtn.animate({
'left': '-1px'
}, 200);
this.slideProEle.animate({
'width': 0
}, 200)
},
resetVerify: function() {
this.slideSucMsgEle.hide();
this.slideBtn.removeClass('suc-drag-btn');
this.slideFinishState = false;
this.slideProEle.css({
'width': 0
});
this.slideBtn.css({
'left': '-1px'
})
this._touchmove();
}
}
var slideVerify = window.slideVerifyPlug || SlideVerify;
return slideVerify;
})));