原创jQuery弹出层插件分享
依赖jquery,兼容IE6\7\8火狐chrom等主流浏览器(绝对原创),不过请求大神帮我提升点效率。
/** *jQuery弹出层插件 * *@authorlanhaoooo@163.com *@since2014-08-23 */ (function($){ varmethods={ o:{ isIe:!-[1,]||document.documentMode>=9,//后面的是判断IE9、IE10的 ie6:!-[1,]&&!window.XMLHttpRequest, ie9_10:document.documentMode>=9, bgLayer:"layerModel_mask", dataId:"layerModel_main", wrapper:"layerModel_wrapper", warpperContent:"layerModel_content", warpperTitle:"layerModel_title", warpperCloseBtn:"layerModel_closeBtn", warpperOwnContent:"layerModel_ownContent", replaceClose:"replaceClose", dragableClass:"dragable", defaultWidth:300 }, generateId:function(){ return"_"+newDate().getTime(); }, init:function(data,options){ //left和top想要使用的时候请设置center为false,这样的情况下才会生效,如果center=true则该设置不生效#666,#999,#e5dfda,#e5e5e5,#ff8800 vardefaults={center:true,locked:true,fixed:true,drag:true,zIndex:9999,opacity:"0.5",title:"系统提示",staySame:false,width:0,height:0,timer:0,bgColor:"#fffaf6",left:350,top:100,head:true,isClose:true,shake:false, close:function(){ returntrue; } }; options=$.extend(defaults,options); vars=this; vargenerateId=s.generateId(); if(typeofdata==='object'){ data=datainstanceof$?data:$(data); if(options.staySame){ data=s.createRender(data,options,generateId).hide(); }else{ data=s.createContainer(data,options,generateId).hide(); } }elseif(typeofdata==='string'||typeofdata==='number'){ data=$("<divid='"+s.o.dataId+generateId+"'></div>").html(data).appendTo(document.body).hide(); }else{ alert("LayerError:Unsupportedatatype:"+typeofdata); return; } if(options.locked&&!s.hasBgLayer()){ $("<divclass='"+s.o.bgLayer+"'id='"+s.o.bgLayer+"'></div>").appendTo(document.body).css({"background":options.bgColor,"opacity":options.opacity}); } data.css({"position":options.fixed?s.o.ie6?"absolute":"fixed":"absolute","z-index":options.zIndex,"left":options.left,"top":options.top}).show(); if(options.center){ s.fixLayer(data); $(window).bind("resizescroll",function(){ s.fixLayer(data); }); } if(options.drag){ s.dragLayer(data,options); } if(options.shake){ s.shakeLayer(data); } vartimeOut; clearTimeout(timeOut); if(options.timer>0){ timeOut=window.setTimeout(function(){ $("#"+s.o.replaceClose+generateId).trigger("click"); },options.timer); } returndata; }, createContainer:function(data,options,generateId){ vars=this; //如果context未定义,则是通过html拼接的方式追加的否则就是原本就存在的,关闭后需要返回原地方 varisHtmlSlice=data.context==undefined?true:false; varwrapperHtml="<divclass='"+s.o.wrapper+"'id='"+s.o.wrapper+generateId+"'>" +"<divclass='"+s.o.warpperContent+"'id='"+s.o.warpperContent+generateId+"'>" +"<aclass='"+s.o.replaceClose+"'id='"+s.o.replaceClose+generateId+"'></a>"; if(options.head){ wrapperHtml+="<h4class='"+s.o.warpperTitle+""+s.o.dragableClass+"'id='"+s.o.warpperTitle+generateId+"'>"; if(options.isClose){ wrapperHtml+="<ahref='javascript:void(0);'title='关闭'class='"+s.o.warpperCloseBtn+"'id='"+s.o.warpperCloseBtn+generateId+"'>×</a>"; } wrapperHtml+=options.title+"</h4>"; } wrapperHtml+="<divid='"+s.o.warpperOwnContent+generateId+"'class='"+s.o.warpperOwnContent+"'></div>" +"</div>" +"</div>"; s.container=$(wrapperHtml); s.container.appendTo(document.body); data.clone(true).appendTo("#"+s.o.warpperOwnContent+generateId).show().attr('id',data.attr('id')||s.o.dataId+generateId); //div默认宽度为100%,所以建议将所有弹出的元素设置宽度,否则弹出层宽度为100% varw=$("#"+data.attr('id')).width()||$("#"+s.o.dataId+generateId).width()||s.o.defaultWidth; //指定了高度 vartempWidth=w; if(options.height>0){ if(options.width>0){ tempWidth=options.width; if(options.width<=w){ $("#"+s.o.warpperOwnContent+generateId).css({"width":options.width,"overflow-x":"auto"}); }else{ //如果指定的宽度大于元素本身的宽度,那么需要将元素居中 //让元素始终居中显示 varxPadding=(options.width-w)/2+8; $("#"+s.o.warpperOwnContent+generateId).css({"padding":"4px"+xPadding+"px"}); } } s.container.width(tempWidth+32); $("#"+s.o.warpperContent+generateId).width(tempWidth+30); $("#"+s.o.warpperOwnContent+generateId).css({"height":options.height,"overflow-y":"auto"}); }else{ if(options.width>0){ tempWidth=options.width; if(options.width<=w){ $("#"+s.o.warpperOwnContent+generateId).css({"width":options.width,"overflow-x":"auto"}); } } s.container.width(tempWidth+22); $("#"+s.o.warpperContent+generateId).width(tempWidth+20); } $("#"+s.o.warpperCloseBtn+generateId).click(function(e){ $("#"+s.o.replaceClose+generateId).trigger("click"); }); $("#"+s.o.replaceClose+generateId).click(function(e){ s.close($("#"+s.o.wrapper+generateId),options,generateId); e.stopPropagation(); }); if(!isHtmlSlice){ //让传入的元素在对话框关闭后可以返回到原来的地方 vardisplay=data.css("display"); varobj=data[0]; varprev=obj.previousSibling; varnext=obj.nextSibling; varparent=obj.parentNode; this["elemBack_"+generateId]=function(){ if(prev&&prev.parentNode){ prev.parentNode.insertBefore(obj,prev.nextSibling); }elseif(next&&next.parentNode){ next.parentNode.insertBefore(obj,next); }elseif(parent){ parent.appendChild(obj); }; data.css({"display":display}); }; } data.detach(); returns.container; }, createRender:function(data,options,generateId){ vars=this; //如果context未定义,则是通过html拼接的方式追加的否则就是原本就存在的,关闭后需要返回原地方 varisHtmlSlice=data.context==undefined?true:false; s.container=$("<divclass='"+s.o.wrapper+"'style='border:none;'id='"+s.o.wrapper+generateId+"'><aclass='"+s.o.replaceClose+"'id='"+s.o.replaceClose+generateId+"'></a></div>"); s.container.appendTo(document.body); data.clone(true).appendTo(s.container).show().attr('id',data.attr('id')||s.o.dataId+generateId); $("#"+s.o.replaceClose+generateId).click(function(e){ s.close($("#"+s.o.wrapper+generateId),options,generateId); e.stopPropagation(); }); if(!isHtmlSlice){ //让传入的元素在对话框关闭后可以返回到原来的地方 vardisplay=data.css("display"); varobj=data[0]; varprev=obj.previousSibling; varnext=obj.nextSibling; varparent=obj.parentNode; s["elemBack_"+generateId]=function(){ if(prev&&prev.parentNode){ prev.parentNode.insertBefore(obj,prev.nextSibling); }elseif(next&&next.parentNode){ next.parentNode.insertBefore(obj,next); }elseif(parent){ parent.appendChild(obj); }; data.css({"display":display}); }; } data.detach(); returns.container; }, isLastLayer:function(){ vars=this; return$("."+s.o.wrapper).length<=0; }, hasBgLayer:function(){ vars=this; return$("."+s.o.bgLayer).length>0; }, close:function(data,options,generateId){ vars=this; //调用回调函数 varresult=options.close(); if(result==undefined||result){ data.remove(); if(s.isLastLayer()){ $("#"+s.o.bgLayer).remove(); } } if(s["elemBack_"+generateId]){ s["elemBack_"+generateId](); }; }, closeLayer:function(obj){ vars=this; var$wapper=$(obj).parents("div."+s.o.wrapper); $("."+s.o.replaceClose,$wapper).trigger("click"); }, fixLayer:function(data){ vars=this; varT=($(window).height()-data.innerHeight())/2+(s.o.ie6?$(document).scrollTop():data.scrollTop()); varL=($(window).width()-data.width())/2+(s.o.ie6?$(document).scrollLeft():data.scrollLeft()); data.css({"left":L,"top":T}); }, dragLayer:function(data,options){ vars=this; varmove=false;//移动标记 varx=0,y=0;//鼠标离控件左上角的相对位置 varo=data.find("."+s.o.dragableClass).css({"cursor":"move"}); vara=o[0]; o.mousedown(function(e){ //IE9IE10居然把e.button改成0了,艹 varisLeftClick=(s.o.isIe&&e.button==1)||(!s.o.isIe&&e.button==0)||(s.o.ie9_10&&e.button==0); if(isLeftClick){ data.fadeTo(20,0.25);//点击后开始拖动并透明显示 s.o.isIe?a.setCapture():window.captureEvents(Event.MOUSEMOVE); move=true; x=e.pageX-parseInt(data.css("left")); y=e.pageY-parseInt(data.css("top")); $(document).mousemove(function(e){ if(move){ varsx=e.pageX-x;//移动时根据鼠标位置计算控件左上角的绝对位置 varsy=e.pageY-y; data.css({"top":sy,"left":sx}); } }).mouseup(function(){ data.fadeTo("fast",1);//松开鼠标后停止移动并恢复成不透明 move=false; x=0; y=0; s.o.isIe?a.releaseCapture():window.captureEvents(Event.MOUSEMOVE|Event.MOUSEUP); }); }else{ returnfalse; } }); }, shakeLayer:function(data){ varll=($(window).width()-data.width())/2; varloop=4; for(vari=1;i<=loop;i++){ data.animate({left:ll-(loop*10-10*i)},50); data.animate({left:ll+2*(loop*10-10*i)},50); } } }; $.fn.layerModel=function(options){ methods.init(this,options); }; $.fn.close=function(){ methods.closeLayer(this); }; $.fn.fix=function(){ varmn=$(this).parents("."+methods.o.wrapper); methods.fixLayer($(mn[0])); }; })(jQuery);
以上所述就是本文的全部内容了,希望大家能够喜欢。