jQuery插件 (输入框默认提示 detext, form检验插件 form_check, 自定义显示提示弹窗、浮框 bgmask, 节点移动 ElMove, 异步form提交、文件异步提交)

jQuery插件 hank编写 (输入框默认提示 detext, form检验插件 form_check, 自定义显示提示弹窗、浮框 bgmask,  节点移动 ElMove, 异步form提交、文件异步提交 form_iframe, 标签切换 switchTag, 轮播 carousel)

/**
 * jQuery插件 hank编写
 */
(function ($){
	/*
	 * v3.4 输入框默认提示  $('#mood_message').detext('请输入文字') ||  $('#mood_message').detext('请输入文字',{left:2,top:5}); zindex是z-index
	 * update 3.2 - 3.3 修复父层是relative时的错位 使用offset定位
	 * ..3.4 - 3.3 增加 label .attr('detext_lab',"1"); 所有相关事件增加 命名空间detext
	 */
	$.fn.detext = function (text,options){
		var my = $(this);
		if(!my.is(':visible'))
			return false;
		//宽带高度的内部默认值,
		var defau = {    
			    width:my.width(),
			    height:my.height(),
			    "zindex":get_zindex(my)+1
			  };
		//如果外部设置以外部默认值为准
		defau = $.extend(defau,$.fn.detext.defaults);
		//如果传参数以参数为准
		var opts = $.extend(defau, options);   
		var lab = $('<label>').attr('detext_lab',"1");
		var myoffset = my.offset();
		var laboffset = {left:(myoffset.left+opts.left),top:(myoffset.top+opts.top)};
		var labcssobj = {
				cursor:'text',
				"z-index":opts['zindex'],
				position: "absolute",
				width:(opts.width-2*opts.left),
				height:(opts.height-2*opts.top)
//				"max-width":(opts.width-2*opts.left)+'px',
//				"max-height":(opts.height-2*opts.top)+'px'
		};
		lab.addClass(opts.myclass);
		lab.css(labcssobj);
		lab.text(text);
		my.bind({"focus.detext":function (){
				lab.hide();},
			"focusout.detext":function (){
				if($(this).val()=='')
				{
					lab.show();
				}else
				{
					lab.hide();
				}
			}});
		lab.bind("click.detext",function (){
			var lmy = $(this);
			lmy.hide(0,function (){my.focus();});
		});
		my.after(lab);
		lab.offset(laboffset);
		//窗口缩放的位置变化
		lab.get(0).resite = function (){
			var $this = $(this);
			if(!$this.is(':visible'))
				return;
			var poffset = $($this.data('pel')).offset();
			var laboffset = {left:(poffset.left+opts.left),top:(poffset.top+opts.top)};
			$this.offset(laboffset);
		};
		
		//收集这些label
		if(!($.fn.detext.detext_el instanceof Array))
			$.fn.detext.detext_el = new Array();
		$.fn.detext.detext_el.push(lab.get(0));
		lab.data('pel',my.get(0));
		
		//窗口缩放的位置变化
		if(!$.fn.detext.detext_resize){
		$(window).bind("resize.detext",function (){
			if(!($.fn.detext.detext_el instanceof Array))
				return;
			var allel = $.fn.detext.detext_el;
			for(var i=0;i<allel.length;i++)
				allel[i].resite();	
		});
		$.fn.detext.detext_resize=1;
		}
		//jq获得元素真实z-index
		function get_zindex(jqobj){
			if(jqobj.css('z-index')=='auto')
			{
				return get_zindex(jqobj.parent());
			}else
			{
				return isNaN(parseInt(jqobj.css('z-index')))?0:parseInt(jqobj.css('z-index'));
			}
				
				
		}
		return my;
	};
	$.fn.detext.defaults = {    
		    left: 2,    
		    top: 2,
		    myclass:'de_text_label'
	};

	/*
	 *form 检验插件 v1.5 ie6兼容 $('#formid').form_check();  || $('#formid').form_check({chtype:'focusout',chwarning:function (ele,msg){alert(msg)}}); 
	 *节点上可以有 属性,cherrTex错误文本,chaddTex错误文本前缀,其他属性请参考代码
	 */
	$.fn.form_check = function (options){
		var defaults = $.extend({}, $.fn.form_check.defaults);   
		var opts = $.extend(defaults, options);   
		var my = $(this);
		if(typeof (opts.chright) == 'function')
			chright = opts.chright;
		if(typeof (opts.chwarning) == 'function')
			chwarning = opts.chwarning;

		if(opts.chtype == 'focusout'){
			$(my).on('focusout.form_check','[chtype]',function (){
				var $this = $(this);
				var chtype = $(this).attr('chtype');
				var chret, addTex = $this.attr('chaddTex') ? $this.attr('chaddTex') : '';
				if($this.attr('last')==$this.val())
					return;
				
				if(chtype == 'mobile')
					chret = chmobile($this.val());
				else if(chtype == 'email')
					chret = chemail($this.val());
				else if(chtype == 'len')
					chret = chlen($this.val(),parseInt($this.attr('minlen')),parseInt($this.attr('maxlen')));
				else if(chtype == 'password'){
					chret = chpass($this.val());
					$this.parents('form').eq(0).find('input[chtype=password1]').removeAttr('last');
				}else if(chtype == 'password1'){
					if($this.val() == $this.parents('form').eq(0).find('input[chtype=password]').val()){
						chret = true;
					}else
						chret = '两次密码输入不一致';
				}else if(chtype == 'checked'){
					chret = chchecked($this);
				}
				else
					return;
				
				$this.attr('last',$this.val());
				if(chret===true)
					chright($this);
				else{
					$this.select();
					chret = $this.attr('cherrTex')?$this.attr('cherrTex'):(addTex+chret);
					chwarning(chret, $this);
				}
			});
		}else if(opts.chtype == 'submit'){
			my.bind("submit.form_check",function (eve){
					var isok = true;
					var ele, addTex;
					my.find('[chtype]').each(function (){
					var $this = $(this);
					var chtype = $(this).attr('chtype');
					var chret;
					if(chtype == 'mobile')
						chret = chmobile($this.val());
					else if(chtype == 'email')
						chret = chemail($this.val());
					else if(chtype == 'len')
						chret = chlen($this.val(),parseInt($this.attr('minlen')),parseInt($this.attr('maxlen')));
					else if(chtype == 'password')
						chret = chpass($this.val());
					else if(chtype == 'password1'){
						if($this.val() == $this.parents('form').eq(0).find('input[chtype=password]').val()){
							chret = true;
						}else
							chret = '两次密码输入不一致';
					}else if(chtype == 'checked'){
						chret = chchecked($this);
					}
					else
						return true;
					if(chret !== true){
						isok = chret;
						ele = $this;
						return false;
					}
					});
					if(isok !== true){
						addTex = ele.attr('chaddTex') ? ele.attr('chaddTex') : '';
						isok = ele.attr('cherrTex')?ele.attr('cherrTex'):(addTex+isok);
						if(typeof (opts.chwarning) == 'function')
							opts.chwarning(isok, ele, eve);
						else{
							alert(isok);
							ele.select();
						}
						my.attr('form_check_submit',"0");
						return false;
					}else{
						my.attr('form_check_submit',"1");
						my.trigger('form_check_submit_ok');
						if(typeof (opts.chright) == 'function')
							return opts.chright();
						else
							return true;
					}
			});
		}
		function chright(El){
			var rihtml = '<span class="form_check-result-chright"></span>';
			var ele = _get_toele(El);
			$(ele).show();
			$(ele).html(rihtml);
		}
		function chwarning(msg, El){
			var warhtml = '<span class="form_check-result-warning">'+msg+'</span>';
			var ele = _get_toele(El);
			$(ele).show();
			$(ele).html(warhtml);
		}
		function _get_toele($this){
			var toele;
			//获取显示信息的节点
			//信息显示在 warid属性的id上
			if($this.is('[form_check-warid]'))
			{
				toele = $('#'+$this.attr('form_check-warid')).get(0);
			}
			//信息显示在 (下一个节点||下一个节点内)的属性checkspan=1的节点上
			else if($this.next().find('*').andSelf().filter('[form_check-checkspan=1]').length==1){
				toele = $this.next().find('*').andSelf().filter('[form_check-checkspan=1]').get(0);
			}
			//信息显示在 id = form_check- + name属性
			else if($this.is('[name]')&&$this.parents('form').eq(0).find('#form_check-'+$this.attr('name')).length==1){
				toele = $this.parents('form').eq(0).find('#form_check-'+$this.attr('name')).get(0);
			}
			//信息显示在添加一个 (下一个节点属性checkspan=1的节点)上
			else{
				var obj = $('<span form_check-checkspan="1" class="form_check-result">&nbsp;</span>');
				$this.after(obj);
				toele = obj.get(0);
			}
			return toele;
		}
		return my;
	};
	//email 电子邮箱 校验函数
	function chemail(msg, name){
		if(typeof (name) == 'undefined')
			name = '电子邮箱';
		var ems = msg.search(/^[\w\-]+@[\w\-]+(\.[a-zA-Z]+)+$/g);
		if(ems==-1)
			return name+'格式有误';
		else
			return true;
	}
	//手机校验函数
	function chmobile(msg, name){
		if(typeof (name) == 'undefined')
			name = '手机';
		var ems = msg.search(/^1\d{10}$/g);
		if(ems==-1)
			return name+'格式有误';
		else
			return true;
	}
	//长度校验函数
	function chlen(msg, minlen, maxlen, istrim){
		if(typeof istrim == 'undefined')
			istrim = true;
		if(typeof minlen == 'undefined' || minlen == null || isNaN(minlen))
			minlen = 1;
		if(istrim)
			msg = $.trim(msg);
                    if(typeof maxlen == 'undefined' ||  maxlen == null || isNaN(maxlen) || maxlen < minlen ){
                            if(msg.length < minlen)
                                    return '内容长度不正确';
                    }else if(msg.length < minlen||msg.length > maxlen){
                        //return '内容长度必须大于' + (minlen - 1) + '小于' + (maxlen + 1); alert();
                        return '内容长度不正确';
                    }
		return true;
	}

	//密码检验函数
	function chpass(msg, name) {
		if(typeof (name) == 'undefined')
			name = '密码';
		if(msg == '' || (/[\'\"\\]/).test(msg)) {
			return name+'空或包含非法字符';
		}
		/*else if(msg.length < 6 || msg.length > 15){
			return name+'长度必须是6-15位';
		}*/
		else if(!(/^\w{6,18}$/).test(msg)){
			return name+'必须是英文字母数字下划线6-18位';
		}
		else {
			return true;
		}
	}
	//checked验证
	function chchecked(ele){
		if( ele.is(':checked'))
			return true;
		else
			return '未选中';
	}
	
	//提供一个外部调用验证函数的接口
	$.fn.form_check.callChFun = function(){
		var nowFun = eval("ch"+arguments[0]);
		var args = [];
		for(var i = 1; i < arguments.length; i++){
			args.push(arguments[i]);
		}
		return nowFun.apply(nowFun, args);
	};
	//外部可访问默认值
	$.fn.form_check.defaults = {    
		    chtype: 'focusout',
		    chright: '',
		    chwarning: ''
	};
})(jQuery);

(function ($){
	/*
	 * @name 自定义显示提示  v0.92  由于位置使用margin,fixed 所以最多兼容ie7 v0.92 - v0.93 修复一个遍历数组bug
	 * @desc 其中$(bgmask).data('myshow') 保存了所有这个bgmask的show节点,但是要判读现在是否属于它还需判断show节点的tobgmask属性是否是bgmask的bgmask属性!<br />
	 * @param $.bgmask.defaults <br />
	 *        scroll是否开启滚动 默认关闭
	 *        clickhide 是否点击bgmask关闭它,默认是
	 *        clickremove 是否点击bgmask删除它,默认否
	 *        show_site 显示的节点的位置 如果是字符串 top,center,left,right,bottom。 如果是对象参见$.bgmask._site函数  v1.0 默认center
	 *        opacity bgmask的透明度,默认0.4
	 *        backgroundColor bgmask的背景色,默认black
	 *        myclass bgmask的class 默认bgmask
	 *        shut_attr 显示节点内的关闭按钮的需要包含的属性 默认shut_bgmask 所有shut关闭按钮上的data('pshow')保存了它们所属show节点
	 *        remove_attr 显示节点内的彻底关闭按钮(无法用open)的需要包含的属性 默认remove_bgmask 所有remove关闭按钮上的data('pshow')保存了它们所属show节点
	 *        zIndex bgmask的z-index
	 *        bgmaskid bgmask的bgmaskid,用来给使用者来识别它<br />
	 *     这些变量可以通过   $.bgmask.defaults 重新覆盖,而调用插件open函数时可以传options参数二次覆盖
	 * @param $.bgmask.allbg 保存了所有的bgmask包括关闭的   $.bgmask.allbg[$bgmask.attr('bgmask')]=$bgmask; 
	 * @fun open函数      1.打开一个新的个bgmask,  show Element|jQuery|string    return $bgmask.attr('bgmask');<br />
	 * 		2.重新打开已有bgmask open(attr) 如果 attr是#id即为bgmask属性 如果是字符##id即为bgmaskid属性      默认为最后一个新建的,以下等同
	 * @fun shut函数 关闭一个bgmask   attr参数与open第二种一样,#..,##...
	 * @fun remove函数 彻底关闭一个bgmask(无法用open), attr参数同上, 其中is_retain_show参数为是否保留show节点,默认不保留
	 * @fun clear函数 清理bgmask上的show节点   attr参数与open第二种一样,#..,##...., is_retain_show 是否保存data里的show节点默认为不保存
	 * @author hank
	 */
	$.bgmask = {
		defaults:{
			scroll:false,
			clickhide:true,
			clickremove:false,
			show_site:"center",
			opacity : 0.4,
			backgroundColor : "black",
			myclass : "bgmask",
			shut_attr:"shut_bgmask",
			remove_attr:"remove_bgmask"
		},
		index:1,
		max_zIndex:1000,
		allbg:{},
		open:function (show,options){
			if(typeof show === 'undefined' && typeof options  === 'undefined'){
				return _reopen('#'+$('[bgmask]').last().attr('bgmask'));
			}
			if(typeof show == 'string' && show.charAt(0) == '#')
				return _reopen(show);
			var defaults = {
					zIndex : $.bgmask.max_zIndex,
					bgmaskid:$.bgmask.index
			};			
			defaults = $.extend(defaults, $.bgmask.defaults);
			var opts = $.extend(defaults, options);
			var maskcss = {
					zIndex : 1000,
					backgroundColor : "black",
					opacity : 0,
				position : "fixed",
				width : "100%",
				height: "100%",
				top : 0,
				left : 0
			};
			maskcss = $.extend(maskcss, opts);
			maskcss['filter'] = "alpha(opacity="+maskcss.opacity*100+")"; 
			var	$bgmask = $('<div bgmask="'+$.bgmask.index+'" bgmaskid="'+opts.bgmaskid+'"></div>');
				$bgmask.attr('class',opts.myclass);
				$bgmask.css(maskcss);
				$('body').append($bgmask);
				
			$bgmask.show();
			
			
			if(opts.scroll === false){
				var scroll_el_str = is_ie?'html':'body';
				if($(scroll_el_str).css("overflow")!='hidden'){
					$bgmask.attr('body_overflow',$(scroll_el_str).css("overflow"));
					var oldwidth = $(scroll_el_str).width();
					$(scroll_el_str).css("overflow", "hidden");
					var scrollwidth = $(scroll_el_str).width() - oldwidth;
					$bgmask.attr('body_scrollwidth',scrollwidth);
					$(scroll_el_str).css('paddingRight',parseInt($(scroll_el_str).css('paddingRight'))+scrollwidth);
				}
			}
			if(opts.clickremove === true){
				$bgmask.bind("click.bgmask",function (){
					$.bgmask.remove("#"+$(this).attr('bgmask'));
				});
			}
			if(opts.clickhide === true){
				$bgmask.bind("click.bgmask",function (){
					$.bgmask.shut("#"+$(this).attr('bgmask'));
				});
			}
			if(typeof show === 'undefined'){
				show = $('<div>');
			}
			if (!(show instanceof jQuery)) {
				try {
					if (typeof show == 'string' || show instanceof Element) {
						show = $(show);
					}else{
						show = $('<div>');
					}
				} catch (err) {
					show = $(show);
				}
			}
			var $show = show;
			$show.css({
				zIndex : parseInt($bgmask.css("zIndex"))+1
				});
			if($show.parent().length==0){
				$('body').append($show);
			}
			$show.show();
			//show放到bgmask data里
			if($bgmask.data('myshow') == undefined){
				$bgmask.data('myshow',[$show]);
			}else{
				if ($show.attr('tobgmask') != $bgmask.attr('bgmask')) {
					var oldatt = $bgmask.data('myshow');
					oldatt = oldatt.push($show);
					$bgmask.data('myshow', oldatt);
				}
			}
			$show.attr('tobgmask',$bgmask.attr('bgmask'));
			
			$allshut_el = $show.find('['+opts.shut_attr+']');
			$allshut_el.data('pshow',$show);
			$allshut_el.each(function (){
				$(this).bind("click.bgmask",function (myeve){
					var pshow = $(this).data('pshow');
					$.bgmask.shut("#"+pshow.attr('tobgmask'));
					myeve.preventDefault();
				});
				
			});
			$allremove_el = $show.find('['+opts.remove_attr+']');
			$allremove_el.data('pshow',$show);
			$allremove_el.each(function (){
				$(this).bind("click.bgmask",function (myeve){
					var pshow = $(this).data('pshow');
					$.bgmask.remove("#"+pshow.attr('tobgmask'));
					myeve.preventDefault();
				});
				
			});
			
			
			$.bgmask._site($show,opts.show_site);
			//得到新的最高层
			if(parseInt($bgmask.css("zIndex"))>=$.bgmask.max_zIndex)
				$.bgmask.max_zIndex = parseInt($bgmask.css("zIndex"))+1;
			$bgmask.data('opts',opts);
			$.bgmask.allbg[$bgmask.attr('bgmask')]=$bgmask; 
			$.bgmask.index++;
			return $bgmask.attr('bgmask');
		},
		/*
		 * show_site如果是对象  默认参数deopts = {fromjq:'',fromsite:{top:1,left:0},css:{}};
		 * fromjq 为jq节点或者节点,//$show相对于formjq的位置top,left 可以选值1,0,-1 ;  css作为最后附加选项覆盖
		 */
		_site:function ($show,show_site){
			//定位
			if($show.length<1)
				return false;
			$show.show();
			//$show.offset({'left':$(window).width()/2,'top':$(window).height()/2});
			
			if (typeof show_site == 'string') {
				$show.css({"top":"50%",
					"left":"50%",
					position : "fixed",
					"margin":0
				});
				switch (show_site) {
				case "top":
					$show.css("top", "0");
					$show.css("margin-left", -($show.outerWidth()/2));
					break;
				case "left":
					$show.css("left", "0");
					$show.css("margin-top", -($show.outerHeight()/2));
					break;
				case "right":
					$show.css("left", "100%");
					$show.css("margin-left", -$show.outerWidth());
					$show.css("margin-top", -($show.outerHeight()/2));
					break;
				case "bottom":
					$show.css("top", "100%");
					$show.css("margin-top", -$show.outerHeight());
					$show.css("margin-left", -($show.outerWidth()/2));
					break;
				case "top,right":
					$show.css("top", "0");
					$show.css("left", "100%");
					$show.css("margin-left", -$show.outerWidth());
					break;
				//默认居中
				default:
					$show.css("margin-left", -($show.outerWidth()/2));
					$show.css("margin-top", -($show.outerHeight()/2));
				}
			} else if (typeof show_site == 'object') {
				var deopts = {fromjq:'',
							fromsite:{top:1,left:0},//$show相对于formjq的位置top,left 可以选值1,0,-1
						css:{}
						};
				var opts = $.extend(deopts, show_site);
				if(opts.fromjq != ''){
					if(!(opts.fromjq instanceof jQuery)){ 
						try {
							if ((opts.fromjq instanceof Element)) {
								opts.fromjq = $(opts.fromjq);
							}else{
								return false;
							}
						}catch(err){
							return false;
						}
					}
					if(opts.fromjq.length<1)
						return false;
					$show.css({position:"absolute"
					});
					var offset = opts.fromjq.offset();
					if(opts.fromsite.left == -1)
						offset.left = offset.left-$show.outerWidth();
					else
						offset.left = offset.left+(opts.fromjq.outerWidth())*opts.fromsite.left;
					if(opts.fromsite.top == -1)
						offset.top = offset.top-$show.outerHeight();
					else
						offset.top = offset.top+(opts.fromjq.outerHeight())*opts.fromsite.top;
					$show.offset({left:offset.left,top:offset.top});
					
				}
				$show.css(opts.css);

			}
		},
		clear:function (attr, is_retain_show){
			if(typeof is_retain_show === 'undefined')
				is_retain_show = false;
			var bgmasks = _getall_bgmask(attr);
			for (var j=0;j<bgmasks.length;j++){
				bgmask = bgmasks[j];
			var bg  = $('div[bgmask='+bgmask+']');
			if(bg.length<1)
				continue;
			var allshow = bg.data('myshow');
			bgmask = bg.attr('bgmask');
			if(typeof allshow == 'object'){
				for(var i=0; i< allshow.length; i++){
					if(allshow[i].attr('tobgmask') == bgmask){
						if(is_retain_show === false)
							allshow[i].removeAttr('tobgmask');
						allshow[i].hide();
						allshow[i].trigger('bgmask_hide');
					}
				}
			}
			if(is_retain_show === false)
				bg.data('myshow',[]);
			}
		},
		shut:function (attr){
			var bgmasks = _getall_bgmask(attr);
			for (var j=0;j<bgmasks.length;j++){
				bgmask = bgmasks[j];
			var bg  = $('div[bgmask='+bgmask+']');
			if(bg.length<1)
				continue;
			if(bg.is(':hidden'))
				continue;
			if(typeof bg == 'object'){
				$.bgmask.clear("#"+bg.attr('bgmask'), true);
				bg.hide();
				if(bg.attr('body_overflow') != undefined){
					var scroll_el_str = is_ie?'html':'body';
					$(scroll_el_str).css("overflow",bg.attr('body_overflow'));
					var scrollwidth = bg.attr('body_scrollwidth');
					$(scroll_el_str).css('paddingRight',parseInt($(scroll_el_str).css('paddingRight'))-scrollwidth);
				}
				bg.trigger('bgmask-shut');
			}
		}
		},
		remove:function (attr, is_retain_show){
			if(typeof is_retain_show === 'undefined')
				is_retain_show = false;
			var bgmasks = _getall_bgmask(attr);
			for (var j=0;j<bgmasks.length;j++){
				bgmask = bgmasks[j];
			var bg  = $('div[bgmask='+bgmask+']');
			if(bg.length<1)
				continue;
			var allshow = bg.data('myshow');
			bgmask = bg.attr('bgmask');
			if(typeof allshow == 'object'){
				for(var i=0; i< allshow.length; i++){
					if(allshow[i].attr('tobgmask') == bgmask){
						allshow[i].removeAttr('tobgmask');
						if(is_retain_show === false){
							allshow[i].trigger('bgmask_remove');
							allshow[i].remove();
						}
							
					}
				}
			}
			if(bg.attr('body_overflow') != undefined){
				var scroll_el_str = is_ie?'html':'body';
				$(scroll_el_str).css("overflow",bg.attr('body_overflow'));
				var scrollwidth = bg.attr('body_scrollwidth');
				$(scroll_el_str).css('paddingRight',parseInt($(scroll_el_str).css('paddingRight'))-scrollwidth);
			}
			bg.remove();
			delete $.bgmask.allbg[bgmask];
			bg.trigger('bgmask-remove');
			}
		}
	};
	var is_ie = !-[1,];
	function _getall_bgmask(attr){
		if(typeof attr == 'undefined')
			attr = '#'+$('[bgmask]').last().attr('bgmask');
		var bgmasks = [];
		if(attr.indexOf('##')===0){
			var bgmaskid = attr.slice(2);
			var bg  = $('div[bgmaskid='+bgmaskid+']');
			bg.each(function (){
				bgmasks.push($(this).attr('bgmask'));
			});
		}else if(attr.indexOf('#')===0){
			bgmasks = [attr.slice(1)];
		}else{
			return [];
		}
		return bgmasks;
	}
	function _reopen(attr){
		var bgmasks = _getall_bgmask(attr);
		for(var i=0;i<bgmasks.length;i++){
			var bgmask = bgmasks[i];
			var bg  = $('div[bgmask='+bgmask+']');
			if(bg.length<1)
				continue;
			var opts = bg.data('opts');
			if(bg.is(':visible'))
				continue;
			bg.show();
			//重新判断滚动
			if(opts.scroll === false){
				var scroll_el_str = is_ie?'html':'body';
				if($(scroll_el_str).css("overflow")!='hidden'){
					bg.attr('body_overflow',$(scroll_el_str).css("overflow"));
					var oldwidth = $(scroll_el_str).width();
					$(scroll_el_str).css("overflow", "hidden");
					var scrollwidth = $(scroll_el_str).width() - oldwidth;
					bg.attr('body_scrollwidth',scrollwidth);
					$(scroll_el_str).css('paddingRight',parseInt($(scroll_el_str).css('paddingRight'))+scrollwidth);
				}
			}
			var allshow = bg.data('myshow');
			bgmask = bg.attr('bgmask');
			if(typeof allshow == 'object'){
				for(var j=0; j< allshow.length; j++){
					if(allshow[j].attr('tobgmask') == bgmask){
						allshow[j].show();
						//重新定位
						$.bgmask._site(allshow[j],opts.show_site);
					}
				}
			}
		}
	}
})(jQuery);

(function ($){
	/**
	 * @name 移动El v0.2
	 * @example $('移动控件').ElMove(需要移动的节点)
	 * @author hank 
	 */
	$.fn.ElMove = function (PEl){
		var my = $(this);
		my.each(function (){
			var now = $(this);
			now.css({"cursor": "move"});
			now.bind({"mousedown.ElMove":function (eve){
				eve.preventDefault();
				$(this).attr('is_elmove',"1");
			},"mouseup.ElMove":function (){
				$(this).attr('is_elmove',"0");
				$(this).removeData('ElMove_pageXY');
				},
			"mousemove.ElMove":function (eve,myeve){
				var moveMy = $(this);
				if(!moveMy.is('[is_elmove="1"]'))
					return;
				if(typeof myeve !== 'undefined')
					eve = myeve;
				else
					eve.stopPropagation();
				var oldpageXY = moveMy.data('ElMove_pageXY');
				var nowpageXY = {"X":eve.pageX,"Y":eve.pageY};
				if(!oldpageXY){
					oldpageXY = {"X":eve.pageX,"Y":eve.pageY};
				}
				var Mleft = nowpageXY.X - oldpageXY.X;
				var Mtop = nowpageXY.Y - oldpageXY.Y;
				moveMy.data('ElMove_pageXY',nowpageXY);
				if(!PEl.is(':visible'))
					return;
				var nowOffset = PEl.offset();
				if(PEl.css('position') == "fixed"){
					PEl.css('position',"absolute");
					PEl.offset(nowOffset);
				}
				PEl.offset({left:nowOffset.left+Mleft,top:nowOffset.top+Mtop});
				if(Mleft != 0 || Mtop != 0)
					PEl.trigger("ElMove");
			},
			"dragstart.ElMove":function (eve){
				eve.preventDefault();
			}
			}).attr('data-Elmove-child','1');
		});
		PEl.attr('data-Elmove-parent','1');
		return my;
	};
	$(function (){
		$('body').bind({"mousemove.ElMove":function (eve){
			var Elmove = $('[is_elmove="1"]');
			if(Elmove.length > 0)
				Elmove.each(function (){
					$(this).triggerHandler('mousemove.ElMove',eve);
				});
		},"mouseup.ElMove":function (){
				$('[is_elmove="1"]').attr('is_elmove',"0").removeData('ElMove_pageXY');
			},
		"mouseleave.ElMove":function (){
			//移出body是否取消
			//$('[is_elmove=1]').attr('is_elmove',"0").removeData('ElMove_pageXY');
		}
		});
	});
})(jQuery);
(function ($){
	/**
	 * @name from的iframe提交 v0.1
	 * @desc 主要是考虑带file的from异步提交
	 * @param options
	 *        	success 成功调用函数 success(retex,toiframe);
	 *       	error 失败调用函数 error(toiframe);
	 *        	complete 完成调用函数 complete(toiframe,'success');
	 *        	isSubmit 是否自动提交,默认 false
	 *       	isOne 是否一次性, 默认 false
	 * @pending       isAddDiscern 是否增加请求标识(默认iframe_async=1)如果是字符串添加此参数请求值为1 
	 * @example $('form#file').form_iframe({success:function (retex){alert('提交成功,'+retex)}});
	 * @author hank 
	 */
	$.fn.form_iframe = function (options){
		var my = $(this);
		var defaults = $.extend({}, $.fn.form_iframe.defaults);
		var opts = $.extend(defaults, options);
		my.each(function (){
			var target, iframe_name, toiframe,
				myform = $(this);
			if(!myform.is('form'))
				return true;
			do{
				iframe_name = 'iframe_'+((Math.random()*10000000000000000).toString()).slice(0,14);
			}while($('iframe[name="'+iframe_name+'"]').length > 0);
			toiframe = $('<iframe form_iframe="1" name="'+iframe_name+'"></iframe>').hide();
			myform.attr('target',iframe_name);
			myform.after(toiframe);
			myform.bind('submit',function (){
				var subCou = (isNaN(parseInt($(this).attr('form_iframe-cou'))) ? 1 : (parseInt($(this).attr('form_iframe-cou'))+1));
				$(this).attr('form_iframe-cou', subCou);
				toiframe.attr('form_iframe-cou', subCou);
			});
			toiframe.data('myform',myform);
			toiframe.bind({"error.form_iframe":function (){
				if(!toiframe.is('[form_iframe-cou]')){
					return;
				}
				opts.error(toiframe);
				opts.complete(toiframe,'failure');
				_my_complete(toiframe, 'failure');
			},
			"load.form_iframe":function (){
				if(!toiframe.is('[form_iframe-cou]')){
					return;
				}
				var retdom = $(this).contents(),
					retex = $(retdom).text();
				opts.success(retex,toiframe);
				opts.complete(toiframe,'success', retex);
				_my_complete(toiframe, 'success');
			}});
			if(opts.isSubmit)
				myform.submit();
		});
		function _my_complete(iframe){
			if(opts.isOne)
				iframe.remove();
		}
		return my;
	};
	$.fn.form_iframe.defaults = {
			success: function (){},    
			error: function (){},
			complete:function (){},
			isSubmit:false,
			isOne:false
	};
})(jQuery);
(function ($){
	/**
	 * @name 标签切换 v0.1
	 * @desc 标签切换
	 * @param options
	 * 			$() TagEl 操作切换的Els 默认切换到 eq = my.index()的showEl 可选参数 switchtag_eg 如果是数组表示切换到 第eq个showEl 否则是showEl的选择器
	 *        	autoHide 是否自动隐藏
	 *       	deEq 默认显示第几个节点,配合自动隐藏使用
	 *       	showEl 被切换的节点,可以是 选择器,或者jqEls
	 *       	PEl 可选的父节点 如果 showEl为 选择器时生效
	 *        	CClass 选择后的节点class
	 *        	eveType 激活切换的事件
	 *        	SBefore 切换之前调用函数 如果返回false取消切换 传递参数 nowTagEl,nowShowEl,allTagEl,allShowEl
	 *        	SAfter 切换之后调用函数 传递参数 nowTagEl,nowShowEl,allTagEl,allShowEl
	 * @example 
	 * @author hank 
	 */
	$.fn.switchTag = function (options){
		var my = $(this);
		var defaults = $.extend({}, $.fn.switchTag.defaults);
		var opts = $.extend(defaults, options);
		var eveType = opts.eveType+'.switchTag';
		my.bind(eveType, function (eve){
			var nowEl = $(this), nowEq = nowEl.attr('switchtag_eg'),
				allShowEl = __getAllShowEl(),
				nowEqS, nowShowEl;
			eve.preventDefault();
			if(nowEq){
				//为数字
				if((parseInt(nowEq)).toString() == nowEq)
					nowEqS = ':eq('+nowEq+')';
				else
					nowEqS = nowEq;
			}else{
				nowEqS =  ':eq('+nowEl.index()+')';
			}
			nowShowEl = allShowEl.filter(nowEqS);
			if(opts.SBefore(nowEl,nowShowEl,my,allShowEl) === false)
				return;
			nowShowEl.show();
			allShowEl.filter(":not("+nowEqS+")").hide();
			my.removeClass(opts.CClass).attr('switchTag','0');
			nowEl.addClass(opts.CClass).attr('switchTag','1');
			opts.SAfter(nowEl,nowShowEl,my,allShowEl);
		}).attr('switchTag','0');
		if(opts.autoHide){
			my.filter(":eq("+opts.deEq+")").trigger(eveType);
		}
		function __getAllShowEl(){
			var allShowEl;
			if(typeof opts.showEl === 'string'){
				allShowEl = opts.PEl.find(opts.showEl);
			}else{
				allShowEl = opts.showEl;
			}
			return allShowEl;
		}
		return my;
	};
	$.fn.switchTag.defaults = {
			autoHide: false,    
			deEq: 0,
			showEl:'',
			PEl:$('body'),
			CClass:'checked_tag',
			eveType:'click',
			SBefore:function (){},
			SAfter:function (){}
			
	};
})(jQuery);
(function ($){
	/**
	 * @name 轮播v0.1
	 * @param options
	         	viewEl: '.viwepager', 视窗选择器 !css overflow: hidden;font-size: 0;!
				onceNum: 1, 每一个屏几个item
				marginR: 2, 每个item的右边间隔
				deNum:1, 默认初始到第几个
				allItemEl: '.allitem', 包住所有itme的节点选择器
				itemEl: '.item', itme 选选择器
				toNumEve: 'click', 切到指定位置的El的触发事件类型
				Mswipe:false, 是否支持jqmbile 的swipe事件
				autoSwit:false, 自动切换的毫秒数,只有大于0会启动
				isLoop:false 是否循环,到最后一个切到第一个
					switContainEl.data('carousel-SetInterval') 绑定了int 可手动关闭;
			attrs 一下属性标记节点类型
				[last] 切换到上个的节点
				[next] 切换到下个
				[tonum] 切到指定位置的El模版的包含节点
				[tonum-one] 切到指定位置的El模版 (!num! 可以替换 位置num) 
			(switContainEl.data('carousel-ReSet'))(NowToNum,NowOnceNum); 绑定了重置的函数
			switContainEl.data('carousel-SwitItem',switItem); 绑定了切换函数的函数
				switItem(side, is_animate, isLoop) side = next | last | num
				
	 * @example 
	   <div class="swit-contain">
		<div class="viwepager">
		<div class="allitem">
			<div class="item"><img src="XXXX" /></div>
		</div>
		</div>
		<a class="last" last>last</a>
		<a class="next" next>next</a>
		<div class="tonum_p">
		<div class="tonum" tonum><a class="tonum-one" tonum-one>!num!</a></div>
		</div>
		</div>
		
	 * @prompt css约束请自行添加
	 * @author hank 
	 */
	$.fn.carousel = function (options){
		var my = $(this);
		var defaults = $.extend({}, $.fn.carousel.defaults);
		var opts = $.extend(defaults, options);
		my.each(function (){
			var switContainEl = $(this);
			var viewEl = switContainEl.find(opts.viewEl);
			var w;
			var num = opts.onceNum;
			var marginR = opts.marginR;
			var oneW;
			var deNum = opts.deNum;
			var sum;
			var screenSum;
			viewEl.data('carousel-num',0);
			viewEl.find(opts.allItemEl).width((sum*(oneW+marginR))+5);
			viewEl.find(opts.itemEl).width(oneW).css('margin-right',marginR);
			switContainEl.data('carousel-opt',{screenSum:screenSum,w:w});
			switContainEl.data('carousel-extopt',opts);
			switContainEl.data('carousel-ReSet',function (NowToNum,NowOnceNum){
				if(typeof NowOnceNum !== 'undefined'){
					num = NowOnceNum;
				}
				if(typeof NowToNum === 'undefined'){
					NowToNum = 1;
				}
				w = viewEl.width();
				oneW = (w-((num-1)*marginR))/num;
				sum = viewEl.find(opts.itemEl).length;
				screenSum = parseInt((sum%num != 0)? sum/num+1 : sum/num);
				viewEl.data('carousel-num',0);
				viewEl.find(opts.allItemEl).width((sum*(oneW+marginR))+5);
				viewEl.find(opts.itemEl).width(oneW).css('margin-right',marginR);
				switContainEl.data('carousel-opt',{screenSum:screenSum,w:w,marginR:marginR});
				//初始化toNum按钮
				switContainEl.find('[tonum]').each(function (){
					var my = $(this);
					var oneMb = my.data('carousel-onemb');
					if(!oneMb){
						oneMb = my.find('[tonum-one]');
						oneMb.remove();
						my.data('carousel-onemb',oneMb);
					}
					my.empty();
					for(var i = 0;i < screenSum; i++ ){
						var nowEl = oneMb.clone();
						nowEl.html((nowEl.html()).replace(/!num!/g,i+1));
						nowEl.attr('data-carousel-tonum',i+1);
						my.append(nowEl);
					}
				});
				switItem(NowToNum, false);
			});
			(switContainEl.data('carousel-ReSet'))(deNum);
			if(opts.autoSwit > 0){
				var tempFun = _getTempFun();
				window[tempFun] = function (){
					if(switContainEl.is(':hidden'))
						return;
					switItem('next',undefined,true);
				};
				switContainEl.data('carousel-SetInterval', setInterval('window.'+tempFun+'()',opts.autoSwit));
			}
			//左右切换按钮
			switContainEl.find('[last]').click(function (){
				switItem('last');
			});
			switContainEl.find('[next]').click(function (){
				switItem('next');
			});
			switContainEl.on(opts.toNumEve+'.carousel','[data-carousel-tonum]',function (){
				switItem($(this).data('carousel-tonum'));
			});

			//jqmobile 手机滑动
			if(opts.Mswipe){
				viewEl.bind('swipeleft swiperight',function (eve){
					var isOk = false;
					if(eve.type === "swipeleft"){
						isOk = switItem('next');
					}else{
						isOk = switItem('last');
					}
					if(isOk !== false){
						eve.stopPropagation();
						eve.preventDefault();
					}
				});
			}
			
			function switItem(side, is_animate, isLoop){
				var NowOpt = switContainEl.data('carousel-opt');
				if(viewEl.data('carousel-animating') == '1'){
					return 'carousel-animating';
				}
				var allEl = viewEl.find(opts.allItemEl),
				nowScreen = parseInt(viewEl.data('carousel-num')),
				toLeft;
				//变量默认值
				if(typeof side === 'undefined'){
					side = 'next';
				}
				if(typeof is_animate === 'undefined'){
					is_animate = true;
				}
				if(typeof isLoop === 'undefined'){
					isLoop = opts.isLoop;
				}
				if(side == 'next'){
					side = nowScreen + 1;
				}else if(side == 'last'){
					side = nowScreen - 1;
				}
				if (typeof side === 'number'){
					side = parseInt(side);
					if(0< side && side <= NowOpt.screenSum && side != nowScreen){
						toLeft = -((side-1) * (NowOpt.w+NowOpt.marginR));
						viewEl.data('carousel-num',side);
						viewEl.data('carousel-animating','1');
						if(is_animate){
							allEl.animate({left:toLeft},function (){viewEl.data('carousel-animating','0');});
						}else{
							allEl.css({left:toLeft});
							viewEl.data('carousel-animating','0');
						}
						//处理next last按钮
						switContainEl.find('[last]').show();
						switContainEl.find('[next]').show();
						if(side == 1){
							switContainEl.find('[last]').hide();
						}else if(side == NowOpt.screenSum){
							switContainEl.find('[next]').hide();
						}
						//处理toNum
						switContainEl.find('[tonum]').each(function (){
							var my = $(this);
							my.find('[tonum-one]:not([data-carousel-tonum="'+side+'"])').removeClass('now');
							my.find('[tonum-one][data-carousel-tonum="'+side+'"]').addClass('now');
						});
						return true;
					}else if(side > NowOpt.screenSum && isLoop){
						switItem(1);
					}
				}
				return false;
			}
			switContainEl.data('carousel-SwitItem',switItem);
		});
		return my;
	};
	$.fn.carousel.defaults = {
			viewEl: '.viwepager',    
			onceNum: 1,
			marginR: 2,
			deNum:1,
			allItemEl: '.allitem',
			itemEl: '.item',
			toNumEve: 'click',
			Mswipe:false,
			autoSwit:false,
			isLoop:false
	};
	//获得临时全局函数
	_getTempFun = function (){
		var tempfun = "_jstempfun_"+((Math.random()*10000000000000000).toString()).slice(0,14);
		while(typeof window[tempfun] !== 'undefined'){
			tempfun = "_jstempfun_"+((Math.random()*10000000000000000).toString()).slice(0,14);
		}
		window[tempfun] = function (){};
		return tempfun;
	};
})(jQuery);

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值