12 |
- /*by zhangxinxu*/
- (function(a){a.fn.powerFloat=function(d){return a(this).each(function(){var f=a.extend({},b,d||{});var g=function(i,h){if(c.target&&c.target.css("display")!=="none"){c.targetClear()}c.s=i;c.trigger=h};switch(f.eventType){case"hover":a(this).hover(function(){g(f,a(this));var i=parseInt(f.showDelay,10),h;if(i){if(h){clearTimeout(h)}h=setTimeout(function(){c.targetGet()},i)}else{c.targetGet()}},function(){c.flagDisplay=false;c.targetHold();if(f.hoverHold){setTimeout(function(){c.displayDetect()},200)}else{c.displayDetect()}});if(f.hoverFollow){a(this).mousemove(function(h){c.cacheData.left=h.pageX;c.cacheData.top=h.pageY;c.targetGet();return false})}break;case"click":a(this).click(function(h){if(c.flagDisplay&&h.target===c.trigger.get(0)){c.flagDisplay=false;c.displayDetect();a(document).unbind("mouseup")}else{g(f,a(this));c.targetGet();e()}});var e=function(){a(document).mouseup(function(k){if(f.eventType==="click"&&c.flagDisplay===true&&k.target!=c.trigger.get(0)){var j=k.pageX,i=k.pageY,l=c.target.offset(),m=c.target.data("width")||c.target.outerWidth(),h=c.target.data("height")||c.target.outerHeight();if(!(j>l.left&&j<l.left+m&&i>l.top&&i<l.top+h)){c.flagDisplay=false;c.displayDetect();a(document).unbind("mouseup")}}return false})};break;case"focus":a(this).focus(function(){g(f,a(this));c.targetGet()}).blur(function(){c.flagDisplay=false;setTimeout(function(){c.displayDetect()},200)});break;default:g(f,a(this));c.targetGet();a(document).unbind("mouseup")}})};var c={targetGet:function(){if(!this.trigger){return this}var h=this.trigger.attr(this.s.targetAttr),g=this.s.target;switch(this.s.targetMode){case"common":if(g){var i=typeof(g);if(i==="object"){if(g.size()){c.target=g.eq(0)}}else{if(i==="string"){if(a(g).size()){c.target=a(g).eq(0)}}}}else{if(h&&a("#"+h).size()){c.target=a("#"+h)}}if(c.target){c.targetShow()}else{return this}break;case"ajax":var d=g||h;this.targetProtect=false;if(/[\.jpg\.png\.gif\.bmp\.jpeg]$/i.test(d)){if(c.cacheData[d]){c.target=a(c.cacheData[d]);c.targetShow()}else{var f=new Image();c.loading();f.onload=function(){var m=f.width,q=f.height;var p=a(window).width(),s=a(window).height();var r=m/q,o=p/s;if(r>o){if(m>p/2){m=p/2;q=m/r}}else{if(q>s/2){q=s/2;m=q*r}}var n='<img class="float_ajax_image" src="'+d+'" width="'+m+'" height = "'+q+'" />';c.cacheData[d]=n;c.target=a(n);c.targetShow()};f.onerror=function(){c.target=a('<div class="float_ajax_error">图片加载失败。</div>');c.targetShow()};f.src=d}}else{if(d){if(c.cacheData[d]){c.target=a('<div class="float_ajax_data">'+c.cacheData[d]+"</div>");c.targetShow()}else{c.loading();a.ajax({url:d,success:function(m){if(typeof(m)==="string"){c.target=a('<div class="float_ajax_data">'+m+"</div>");c.targetShow();c.cacheData[d]=m}},error:function(){c.target=a('<div class="float_ajax_error">数据没有加载成功。</div>');c.targetShow()}})}}}break;case"list":var k='<ul class="float_list_ul">',j;if(a.isArray(g)&&(j=g.length)){a.each(g,function(n,p){var o="",r="",q,m;if(n===0){r=' class="float_list_li_first"'}if(n===j-1){r=' class="float_list_li_last"'}if(typeof(p)==="object"&&(q=p.text.toString())){if(m=p.href.toString()){o='<a href="'+m+'" class="float_list_a">'+q+"</a>"}else{o=q}}else{if(typeof(p)==="string"&&p){o=p}}if(o){k+="<li"+r+">"+o+"</li>"}})}else{k+='<li class="float_list_null">列表无数据。</li>'}k+="</ul>";c.target=a(k);this.targetProtect=false;c.targetShow();break;case"remind":var l=g||h;this.targetProtect=false;if(typeof(l)==="string"){c.target=a("<span>"+l+"</span>");c.targetShow()}break;default:var e=g||h,i=typeof(e);if(e){if(i==="string"){if(/<.*>/.test(e)){c.target=a("<div>"+e+"</div>");this.targetProtect=false}else{if(a(e).size()){c.target=a(e).eq(0);this.targetProtect=true}else{if(a("#"+e).size()){c.target=a("#"+e).eq(0);this.targetProtect=true}else{c.target=a("<div>"+e+"</div>");this.targetProtect=false}}}c.targetShow()}else{if(i==="object"){if(!a.isArray(e)&&e.size()){c.target=e.eq(0);this.targetProtect=true;c.targetShow()}}}}}return this},container:function(){var d=this.s.container,e=this.s.targetMode||"mode";if(e==="ajax"||e==="remind"){this.s.sharpAngle=true}else{this.s.sharpAngle=false}if(this.s.reverseSharp){this.s.sharpAngle=!this.s.sharpAngle}if(e!=="common"){if(d===null){d="plugin"}if(d==="plugin"){if(!a("#floatBox_"+e).size()){a('<div id="floatBox_'+e+'" class="float_'+e+'_box"></div>').appendTo(a("body")).hide()}d=a("#floatBox_"+e)}if(d&&typeof(d)!=="string"&&d.size()){if(this.targetProtect){c.target.show().css("position","static")}c.target=d.empty().append(c.target)}}return this},setWidth:function(){var d=this.s.width;if(d==="auto"){if(this.target.get(0).style.width){this.target.css("width","auto")}}else{if(d==="inherit"){this.target.width(this.trigger.width())}else{this.target.css("width",d)}}return this},position:function(){var h,w=0,k=0,m=0,x=0,r,n,e,D,t,p,f=this.target.data("height"),B=this.target.data("width"),q=a(window).scrollTop(),A=parseInt(this.s.offsets.x,10)||0,z=parseInt(this.s.offsets.y,10)||0,v=this.cacheData;if(!f){f=this.target.outerHeight();if(this.s.hoverFollow){this.target.data("height",f)}}if(!B){B=this.target.outerWidth();if(this.s.hoverFollow){this.target.data("width",B)}}h=this.trigger.offset();w=this.trigger.outerHeight();k=this.trigger.outerWidth();r=h.left;n=h.top;var l=function(){if(r<0){r=0}else{if(r+w>a(window).width()){r=a(window).width()=w}}},i=function(){if(n<0){n=0}else{if(n+w>a(document).height()){n=a(document).height()-w}}};if(this.s.hoverFollow&&v.left&&v.top){if(this.s.hoverFollow==="x"){r=v.left;l()}else{if(this.s.hoverFollow==="y"){n=v.top;i()}else{r=v.left;n=v.top;l();i()}}}var g=["4-1","1-4","5-7","2-3","2-1","6-8","3-4","4-3","8-6","1-2","7-5","3-2"],u=this.s.position,d=false,j;a.each(g,function(E,F){if(F===u){d=true;return}});if(!d){u="4-1"}var C=function(E){var F="bottom";switch(E){case"1-4":case"5-7":case"2-3":F="top";break;case"2-1":case"6-8":case"3-4":F="right";break;case"1-2":case"8-6":case"4-3":F="left";break;case"4-1":case"7-5":case"3-2":F="bottom";break}return F};var s=function(G){var H=0,E=0,F=(c.s.sharpAngle&&c.corner)?true:false;if(G==="right"){E=r+k+B+A;if(F){E+=c.corner.width()}if(E>a(window).width()){return false}}else{if(G==="bottom"){H=n+w+f+z;if(F){H+=c.corner.height()}if(H>q+a(window).height()){return false}}else{if(G==="top"){H=f+z;if(F){H+=c.corner.height()}if(H>n-q){return false}}else{if(G==="left"){E=B+A;if(F){E+=c.corner.width()}if(E>r){return false}}}}}return true};j=C(u);if(this.s.sharpAngle){this.createSharp(j)}if(this.s.edgeAdjust){if(s(j)){(function(){var F={top:{right:"2-3",left:"1-4"},right:{top:"2-1",bottom:"3-4"},bottom:{right:"3-2",left:"4-1"},left:{top:"1-2",bottom:"4-3"}};var G=F[j],E;if(G){for(E in G){if(!s(E)){u=G[E]}}}})()}else{(function(){var F={top:{left:"3-2",right:"4-1"},right:{bottom:"1-2",top:"4-3"},bottom:{left:"2-3",right:"1-4"},left:{bottom:"2-1",top:"3-4"}};var G=F[j],E=[];for(name in G){E.push(name)}if(s(E[0])||!s(E[1])){u=G[E[0]]}else{u=G[E[1]]}})()}}var y=C(u),o=u.split("-")[0];if(this.s.sharpAngle){this.createSharp(y);m=this.corner.width(),x=this.corner.height()}if(this.s.hoverFollow){if(this.s.hoverFollow==="x"){e=r+A;if(o==="1"||o==="8"||o==="4"){e=r-(B-k)/2+A}else{e=r-(B-k)+A}if(o==="1"||o==="5"||o==="2"){D=n-z-f-x;p=n-x-z-1}else{D=n+w+z+x;p=n+w+z+1}t=h.left-(m-k)/2}else{if(this.s.hoverFollow==="y"){if(o==="1"||o==="5"||o==="2"){D=n-(f-w)/2+z}else{D=n-(f-w)+z}if(o==="1"||o==="8"||o==="4"){e=r-B-A-m;t=r-m-A-1}else{e=r+k-A+m;t=r+k+A+1}p=h.top-(x-w)/2}else{e=r+A;D=n+z}}}else{switch(y){case"top":D=n-z-f-x;if(o=="1"){e=r-A}else{if(o==="5"){e=r-(B-k)/2-A}else{e=r-(B-k)-A}}p=n-x-z-1;t=r-(m-k)/2;break;case"right":e=r+k+A-m;if(o=="2"){D=n+z}else{if(o==="6"){D=n-(f-w)/2+z}else{D=n-(f-w)+z}}t=r+k+A;p=n-(x-w)/2;break;case"bottom":D=n+w+z+x;if(o=="4"){e=r+A}else{if(o==="7"){e=r-(B-k)/2+A}else{e=r-(B-k)+A}}p=n+w+z+1;t=r-(m-k)/2;break;case"left":e=r-B-A-m;if(o=="2"){D=n-z}else{if(o==="6"){D=n-(B-k)/2-z}else{D=n-(f-w)-z}}t=e+m;p=n-(B-m)/2;break}}if(x&&m&&this.corner){this.corner.css({left:t,top:p,zIndex:this.s.zIndex+1})}this.target.css({position:"absolute",left:e,top:D,zIndex:this.s.zIndex});return this},createSharp:function(g){var j,k,f="",d="";var i={left:"right",right:"left",bottom:"top",top:"bottom"},e=i[g]||"top";if(this.target){j=this.target.css("background-color");if(parseInt(this.target.css("border-"+e+"-width"))>0){k=this.target.css("border-"+e+"-color")}if(k&&k!=="transparent"){f='style="color:'+k+';"'}else{f='style="display:none;"'}if(j&&j!=="transparent"){d='style="color:'+j+';"'}else{d='style="display:none;"'}}var h='<div id="floatCorner_'+g+'" class="float_corner float_corner_'+g+'"><span class="corner corner_1" '+f+'>◆</span><span class="corner corner_2" '+d+">◆</span></div>";if(!a("#floatCorner_"+g).size()){a("body").append(a(h))}this.corner=a("#floatCorner_"+g);return this},targetHold:function(){if(this.s.hoverHold){var d=parseInt(this.s.hideDelay,10)||200;this.target.hover(function(){c.flagDisplay=true},function(){c.flagDisplay=false;setTimeout(function(){c.displayDetect()},d)})}return this},loading:function(){this.target=a('<div class="float_loading"></div>');this.targetShow();this.target.removeData("width").removeData("height");return this},displayDetect:function(){if(!this.flagDisplay){this.targetHide()}return this},targetShow:function(){c.cornerClear();this.flagDisplay=true;this.container().setWidth().position();this.target.show();if(a.isFunction(this.s.showCall)){this.s.showCall.call(this.trigger,this.target)}return this},targetHide:function(){this.flagDisplay=false;this.targetClear();this.cornerClear();if(a.isFunction(this.s.hideCall)){this.s.hideCall.call(this.trigger)}this.target=null;this.trigger=null;this.s={};this.targetProtect=false;return this},targetClear:function(){if(this.target){if(this.target.data("width")){this.target.removeData("width").removeData("height")}if(this.targetProtect){this.target.children().hide().appendTo(a("body"))}this.target.unbind().hide()}},cornerClear:function(){if(this.corner){this.corner.remove()}},target:null,trigger:null,s:{},cacheData:{},targetProtect:false};a.powerFloat={};a.powerFloat.hide=function(){c.targetHide()};var b={width:"auto",offsets:{x:0,y:0},zIndex:999,eventType:"hover",showDelay:0,hideDelay:0,hoverHold:true,hoverFollow:false,targetMode:"common",target:null,targetAttr:"rel",container:null,reverseSharp:false,position:"4-1",edgeAdjust:true,showCall:a.noop,hideCall:a.noop}})(jQuery);
|