(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()){ 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':'0' },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':'0' }) this._touchmove(); }, } var slideVerify = window.slideVerifyPlug || SlideVerify; return slideVerify; })));