jQuery插件 hank编写 (输入框默认提示 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 = $('
'); } if (!(show instanceof jQuery)) { try { if (typeof show == 'string' || show instanceof Element) { show = $(show); }else{ show = $('
'); } } catch (err) { show = $(show); } } var $show = show; $show.css({ zIndex : parseInt($bgmask.css("zIndex"))+1 }); if($show.parent().size()==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.size()<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.size()<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 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+'"]').size() > 0); toiframe = $('').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 * @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).size(); 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);

你可能感兴趣的:(jQuery插件 hank编写 (输入框默认提示 detext, form检验插件 form_check, 自定义显示提示弹窗、浮框 bgmask, 节点移动 ElMove, 异步form提交...)