1 Star 0 Fork 443

望月 / LayX

forked from 百小僧 / Layx 
加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
克隆/下载
layx.min.js 14.50 KB
一键复制 编辑 原始数据 按行查看 历史
百小僧 提交于 2018-05-02 15:35 . v1.0.0 beta
!function(n,t){"use strict";var i={Event:{on:function(n,t){this[n]||(this[n]=[]);this[n].push(t)},emit:function(n){var t=this,i=arguments.length>1?Array.prototype.slice.call(arguments,1):[];t[n]&&Array.prototype.forEach.call(t[n],function(n){n.apply(self,i)})}},extend:function(n,...t){return t.forEach(t=>{let i=Object.keys(t).reduce((n,i)=>n[i]=Object.getOwnPropertyDescriptor(t,i),n,{});Object.getOwnPropertySymbols(t).forEach(n=>{let r=Object.getOwnPropertyDescriptor(t,n);r.enumerable&&(i[n]=r)});Object.defineProperties(n,i)}),n},getNodeByClassName:function(n,t){if(n===document.body)return null;var i=n.classList;return i.contains(t)?n:arguments.callee(n.parentNode,t)},getElementById:function(n,t){return(t?t:document).getElementById(n)},getElementBySelector:function(n,t){return(t?t:document).querySelector(n)},isArray:function(n){return Object.prototype.toString.call(n)=="[object Array]"},InsertAfter:function(n,t){(t?t:document.body).lastElementChild.insertAdjacentHTML("afterend",n)},isFunction:function(n){return n&&Object.prototype.toString.call(n)==="[object Function]"},getCoords:function(n){var r=n.getBoundingClientRect(),u=n.ownerDocument,t=u.body,i=u.documentElement,f=i.clientTop||t.clientTop||0,e=i.clientLeft||t.clientLeft||0,o=Math.round(r.top)+(self.pageYOffset||i.scrollTop||t.scrollTop)-f,s=Math.round(r.left)+(self.pageXOffset||i.scrollLeft||t.scrollLeft)-e;return{top:o-1,left:s-1}}},o={id:"layx",title:"Layx",width:800,height:500,screen:"center",content:["iframe","about:blank"],move:!0,moveLock:{x:!1,y:!1,limit:!1},resize:!0,min:!0,max:!0,minWidth:100,minHeight:100,events:{load:function(){},destroy:function(){},maxOrNormal:function(){},min:function(){}}},e=function(n,t,u){var o=arguments[3]||{},f=o.container||document.documentElement,c=!1||o.limit,s=!1||o.lockX,h=!1||o.lockY,l=i.getElementBySelector(".layx-mask",u),a=function(n){var v;if(n=n||window.event,v=n.button||n.which,v==1&&n.shiftKey==!1){e.isMove=!0;var d=u.getAttribute("data-statu")||"normal",r=eval("("+u.getAttribute("data-area")+")"),a=i.getElementBySelector(".layx-max-normal",u),l=n.clientX-t.offset_x,o=n.clientY-t.offset_y;if(c){var g=l+u.offsetWidth,nt=o+u.offsetHeight,y=i.getCoords(f),p=y.left,w=y.top,b=p+f.clientWidth,k=w+f.clientHeight;l=Math.max(l,p);o=Math.max(o,w);g>b&&(l=b-u.offsetWidth);nt>k&&(o=k-u.offsetHeight)}s&&(l=t.lockX);h&&(o=t.lockY);o=o>0?o:0;u.style.top=o+"px";d==="max"?(u.style.setProperty("width",r[0]+"px"),u.style.setProperty("height",r[1]+"px"),u.setAttribute("data-statu","normal"),a&&(a.classList.remove("layx-icon-max"),a.classList.add("layx-icon-normal")),n.clientX<r[0]/2?u.style.left=0:n.clientX>r[0]/2&&n.clientX<f.clientWidth-r[0]?u.style.left=n.clientX-r[0]/2+"px":f.clientWidth-n.clientX<r[0]/2?u.style.left=f.clientWidth-r[0]+"px":f.clientWidth-n.clientX>r[0]/2&&n.clientX>=f.clientWidth-r[0]&&(u.style.left=n.clientX-r[0]/2+"px"),t.offset_x=n.clientX-u.offsetLeft):u.style.left=l+"px"}},v=function(n){if(n=n||window.event,document.onmouseup=null,document.onmousemove=null,e.isMove){var t=eval("("+u.getAttribute("data-area")+")"),f=Number(u.style.top.replace("px","")),o=Number(u.style.left.replace("px",""));l.style.setProperty("visibility","hidden");t[2]=f;t[3]=o;u.setAttribute("data-area","["+t+"]");f==0&&i.Event.emit(r.name+"-maxOrNormal",u)}e.isMove=!1;i.Event.emit(r.name+`-`+"updateStatus",u)},y=function(e){var o,y;return e=e||window.event,o=u.getAttribute("data-statu")||"normal",o!=="min"&&n&&(l.style.setProperty("visibility","visible"),y=eval("("+u.getAttribute("data-area")+")"),f.clientWidth<y[0]&&(c=!1,s=!1,h=!1),s&&(t.lockX=i.getCoords(t).left),h&&(t.lockY=i.getCoords(t).top),/a/[-1]=="a"?(t.offset_x=e.layerX,t.offset_y=e.layerY):(t.offset_x=e.offsetX,t.offset_y=e.offsetY),t.offset_x=t.offset_x+t.offsetLeft+1,t.offset_y=t.offset_y+t.offsetTop+1,document.onmouseup=v,document.onmousemove=a,u.style.zIndex=++r.zIndex),e.stopPropagation(),!1};e.isMove=!1;t.onmousedown=y},u=function(n,t,u,f,e,o,s,h,c){var l=i.getElementBySelector(".layx-mask",t),a=function(n){var p;if(n=n||window.event,p=n.button||n.which,p==1&&n.shiftKey==!1){var l=n.clientX-u.disX,a=n.clientY-u.disY,v=o?u.iParentWidth+u.iParentLeft-2:document.documentElement.clientWidth-t.offsetLeft-2,y=s?u.iParentHeight+u.iParentTop-2:document.documentElement.clientHeight-t.offsetTop-2,i=o?u.iParentWidth-l-2:u.offsetWidth+l,r=s?u.iParentHeight-a-2:u.offsetHeight+a;o&&(t.style.left=u.iParentLeft+l+"px");s&&(t.style.top=u.iParentTop+a+"px");i<f&&(i=f);i>v&&(i=v);h||(t.style.width=i+"px");r<e&&(r=e);r>y&&(r=y);c||(t.style.height=r+"px");o&&i==f&&o&&(t.style.left=u.iParentLeft+u.iParentWidth-f+"px");o&&i==v&&o&&(t.style.left="0px");s&&r==e&&s&&(t.style.top=u.iParentTop+u.iParentHeight-e+"px");s&&r==y&&s&&(t.style.top="0px")}},v=function(n){n=n||window.event;document.onmouseup=null;document.onmousemove=null;l.style.setProperty("visibility","hidden");var u=Number(t.style.width.replace("px","")),f=Number(t.style.height.replace("px","")),e=Number(t.style.top.replace("px","")),o=Number(t.style.left.replace("px",""));t.setAttribute("data-area","["+[u,f,e,o]+"]");i.Event.emit(r.name+`-`+"updateStatus",t)},y=function(i){i=i||window.event;var r=t.getAttribute("data-statu")||"normal";return r==="normal"&&n&&(l.style.setProperty("visibility","visible"),u.disX=i.clientX-u.offsetLeft,u.disY=i.clientY-u.offsetTop,u.iParentTop=t.offsetTop,u.iParentLeft=t.offsetLeft,u.iParentWidth=t.offsetWidth,u.iParentHeight=t.offsetHeight,document.onmouseup=v,document.onmousemove=a),i.stopPropagation(),!1};u.onmousedown=y},f={screenTransform:function(n,t,r){var u=document.documentElement.clientWidth,f=document.documentElement.clientHeight;if(i.isArray(n))return{top:n[0],left:n[1]};switch(n.toString()){case"center":default:return{top:Math.ceil((f-r-2)/2),left:Math.ceil((u-t-2)/2)};case"lt":return{top:0,left:0};case"rt":return{top:0,left:u-t-2};case"lb":return{top:f-r-2,left:0};case"rb":return{top:f-r-2,left:u-t-2}}},init:function(n){var c=this,t=i.extend({},o,n||{}),s=r.name+`-`,l=s+t.id,p=c.screenTransform(t.screen,t.width,t.height),b=`<div class="layx-iframe" data-type="`+t.content[0]+`" `+(t.content[0]==="iframe"?' data-content="'+t.content[1]+'" ':"")+` id="`+l+`" style="height:`+t.height+`px;width:`+t.width+`px;z-index:`+ ++r.zIndex+`;top:`+p.top+`px;left:`+p.left+`px;">
<div class="layx-iframe-title layx-flex-row">
<div class="layx-title-icons"></div>
<div class="layx-title-label layx-flex-item" title="`+t.title+`">`+t.title+`</div>
<div class="layx-title-tools">`+(t.min===!0?`<a class="layx-title-tool-item layx-min layx-iconfont layx-icon-min"></a>`:``)+`
`+(t.max===!0?`<a class="layx-title-tool-item layx-max-normal layx-iconfont layx-icon-normal"></a>`:``)+`
<a class="layx-title-tool-item layx-destroy layx-iconfont layx-icon-destroy"></a>
</div>
</div>
<div class="layx-body">
<div class="layx-mask"></div>
</div>
<div class="layx-drag" `+(t.resize?"":' style="visibility:hidden;" ')+`>
<div class="layx-drag-top"></div>
<div class="layx-drag-bottom"></div>
<div class="layx-drag-left"></div>
<div class="layx-drag-right"></div>
<div class="layx-drag-left-top"></div>
<div class="layx-drag-right-top"></div>
<div class="layx-drag-left-bottom"></div>
<div class="layx-drag-right-bottom"></div>
</div>
</div>`,f,h,w,a,v,y;i.InsertAfter(b);r.zIndex++;f=i.getElementById(l);f.onclick=function(){i.Event.emit(s+"setTop",f)};c.recoreLayxContainerArea(f);h=c.createIframe(i.getElementBySelector(".layx-body",f),t.content[1],function(){i.isFunction(t.events.load)&&t.events.load(f)});r.windows[l]={};r.windows[l].createDate=new Date;i.Event.emit(s+"updateStatus",f);w=i.getElementBySelector(".layx-icon-destroy",f);w.onclick=function(n){n=n||window.event;var r;i.isFunction(t.events.destroy)&&(r=t.events.destroy(h,f));r!==!1&&(c.destroyIframe(h),i.Event.emit(s+"destroy",f));n.stopPropagation()};a=i.getElementBySelector(".layx-max-normal",f);a&&(a.onclick=function(n){var r,u;n=n||window.event;i.isFunction(t.events.maxOrNormal)&&(u=f.getAttribute("data-statu")||"normal",r=t.events.maxOrNormal(h,u,f));r!==!1&&i.Event.emit(s+"maxOrNormal",f);n.stopPropagation()});v=i.getElementBySelector(".layx-title-label",f);v.ondblclick=function(n){n=n||window.event;i.Event.emit(s+"maxOrNormal",f);n.stopPropagation()};new e(t.move,v,f,{limit:t.moveLock.limit,lockX:t.moveLock.x,lockY:t.moveLock.y});y=i.getElementBySelector(".layx-min",f);y&&(y.onclick=function(n){var r,u,e;n=n||window.event;u=this;u.classList.contains("layx-icon-max")?i.isFunction(t.events.maxOrNormal)&&(e=f.getAttribute("data-statu")||"normal",r=t.events.maxOrNormal(h,e,f)):i.isFunction(t.events.min)&&(r=t.events.min(h,f));r!==!1&&i.Event.emit(s+"min",f);n.stopPropagation()});var k=i.getElementBySelector(".layx-drag-left",f),d=i.getElementBySelector(".layx-drag-top",f),g=i.getElementBySelector(".layx-drag-right",f),nt=i.getElementBySelector(".layx-drag-bottom",f),tt=i.getElementBySelector(".layx-drag-left-top",f),it=i.getElementBySelector(".layx-drag-right-top",f),rt=i.getElementBySelector(".layx-drag-right-bottom",f),ut=i.getElementBySelector(".layx-drag-left-bottom",f);return new u(t.resize,f,k,t.minWidth,t.minHeight,!0,!1,!1,!0),new u(t.resize,f,d,t.minWidth,t.minHeight,!1,!0,!0,!1),new u(t.resize,f,g,t.minWidth,t.minHeight,!1,!1,!1,!0),new u(t.resize,f,nt,t.minWidth,t.minHeight,!1,!1,!0,!1),new u(t.resize,f,tt,t.minWidth,t.minHeight,!0,!0,!1,!1),new u(t.resize,f,it,t.minWidth,t.minHeight,!1,!0,!1,!1),new u(t.resize,f,rt,t.minWidth,t.minHeight,!1,!1,!1,!1),new u(t.resize,f,ut,t.minWidth,t.minHeight,!0,!1,!1,!1),f},createIframe:function(n,t,i){var r=document.createElement("iframe");return r.classList.add("layx-webcontent"),r.setAttribute("allowtransparency",!0),r.setAttribute("frameborder",0),r.setAttribute("scrolling","auto"),i&&Object.prototype.toString.call(i)==="[object Function]"&&(r.attachEvent?r.attachEvent("onload",i):r.addEventListener?r.addEventListener("load",i):r.onload=i),r.src=t,n.appendChild(r),r},destroyIframe:function(n){n.src="about:blank";try{n.contentWindow.document.write("");n.contentWindow.document.clear()}catch(t){}n.parentNode.removeChild(n)},changeLayxContainerArea:function(n,t,i){i=i||"size&position";i.indexOf("size")>-1&&(n.style.setProperty("width",t[0]==="auto"?t[0]:t[0]+"px"),n.style.setProperty("height",t[1]==="auto"?t[1]:t[1]+"px"));i.indexOf("position")>-1&&(n.style.setProperty("top",t[2]==="auto"?t[2]:t[2]+"px"),n.style.setProperty("left",t[3]==="auto"?t[3]:t[3]+"px"));n.style.setProperty("bottom","auto")},recoreLayxContainerArea:function(n){n.getAttribute("data-area")||n.setAttribute("data-area","["+[n.offsetWidth-2,n.offsetHeight-2,n.offsetTop,n.offsetLeft]+"]")},layxContainerMinManager:function(){var u=0,e=200,o=30,t=10,h=document.documentElement.clientWidth,s=Math.floor(h/e),n=r.windows,i;if(n)for(i in n)n[i].status==="min"&&(f.changeLayxContainerArea(n[i].container,[e,o,"auto",u%s*(e+t)+t]),n[i].container.style.setProperty("bottom",Math.floor(u/s)*(o+t)+t+"px"),u++)}},r={v:"1.0.0 beta",name:"layx",open:function(n){var r=this,e=r.name+"-"+n.id,t=r.windows[e],u;if(t){u=t.status;switch(u){case"min":i.getElementBySelector(".layx-min",t.container).click()}t.container.click()}else f.init(n)},windows:{},zIndex:19920527},s=function(){var n=r.name+`-`;i.Event.on(n+"destroy",function(n){var t=n.getAttribute("id");delete r.windows[t];n.parentNode.removeChild(n)});i.Event.on(n+"maxOrNormal",function(t){var s=document.documentElement.clientWidth,h=document.documentElement.clientHeight,o=i.getElementBySelector(".layx-drag",t),c=i.getElementBySelector(".layx-mask",t),e=t.getAttribute("data-statu")||"normal",l=eval("("+t.getAttribute("data-area")+")"),r=i.getElementBySelector(".layx-max-normal",t),u=i.getElementBySelector(".layx-min",t);e==="normal"||e==="min"?(f.changeLayxContainerArea(t,[s-2,h-2,0,0]),t.setAttribute("data-statu","max"),r&&(r.classList.remove("layx-icon-normal"),r.classList.add("layx-icon-max")),u&&(u.classList.contains("layx-icon-min")||(u.classList.remove("layx-icon-max"),u.classList.add("layx-icon-min"))),o.style.setProperty("visibility","hidden")):e==="max"&&(f.changeLayxContainerArea(t,l),t.setAttribute("data-statu","normal"),r&&(r.classList.remove("layx-icon-max"),r.classList.add("layx-icon-normal")),o.style.setProperty("visibility","visible"));c.style.setProperty("visibility","hidden");i.Event.emit(n+"updateStatus",t)});i.Event.on(n+"min",function(t){var h=document.documentElement.clientWidth,c=document.documentElement.clientHeight,l=t.getAttribute("data-statu")||"normal",o=eval("("+t.getAttribute("data-area")+")"),s=i.getElementBySelector(".layx-drag",t),u=i.getElementBySelector(".layx-max-normal",t),r=i.getElementBySelector(".layx-min",t),e;u&&(u.classList.contains("layx-icon-normal")||(u.classList.remove("layx-icon-max"),u.classList.add("layx-icon-normal")));l==="max"&&r&&r.setAttribute("data-area","["+[h,c,0,0]+"]");r&&(r.classList.contains("layx-icon-max")?(e=r.getAttribute("data-area"),o=e?eval("("+e+")"):o,f.changeLayxContainerArea(t,o),e?(t.setAttribute("data-statu","max"),u&&(u.classList.remove("layx-icon-normal"),u.classList.add("layx-icon-max")),r.removeAttribute("data-area")):(s.style.setProperty("visibility","visible"),t.setAttribute("data-statu","normal")),r.classList.remove("layx-icon-max"),r.classList.add("layx-icon-min"),i.Event.emit(n+"updateStatus",t)):(s.style.setProperty("visibility","hidden"),t.setAttribute("data-statu","min"),i.Event.emit(n+"updateStatus",t),r.classList.remove("layx-icon-min"),r.classList.add("layx-icon-max"),f.layxContainerMinManager()))});i.Event.on(n+"updateStatus",function(n){var t=n.getAttribute("id"),f=i.getElementBySelector(".layx-title-label",n).getAttribute("title"),e=n.getAttribute("data-statu")||"normal",o=n.style.zIndex,u=n.getAttribute("data-type"),s=u==="iframe"?n.getAttribute("data-content"):i.getElementBySelector(".layx-body",n).lastElementChild.innerHTML,h=u==="iframe"?i.getElementBySelector(".layx-webcontent",n).contentWindow:window,c=r.windows[t].createDate;r.windows[t]={id:t,title:f,status:e,area:{width:Number(n.style.width.replace("px","")),height:Number(n.style.height.replace("px","")),top:Number(n.style.top.replace("px","")),left:Number(n.style.left.replace("px",""))},zIndex:o,type:u,content:s,container:n,context:h,updateDate:new Date,createDate:c}});i.Event.on(n+"setTop",function(t){var u=i.getElementBySelector(".layx-mask",t);u.style.setProperty("visibility","hidden");t.style.zIndex=++top.layx.zIndex;r.windows[t.getAttribute("id")]&&i.Event.emit(n+"updateStatus",t)})}();t.layx=r;n.layx=r;n.layx.app=r;window.onresize=function(){f.layxContainerMinManager()}}(top,window);
JavaScript
1
https://gitee.com/imokyou/LayX.git
git@gitee.com:imokyou/LayX.git
imokyou
LayX
LayX
master

搜索帮助