(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; })));