本文实例讲述了JavaScript实现模仿桌面窗口的方法。分享给大家供大家参考。具体如下:
这里使用JS模仿了桌面窗口的移动、八个方向的缩放、最小化、最大化和关闭,以及 双击缩小放大窗口、改变窗口大小的预览效果等功能。
<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\"> <html xmlns=\"http://www.w3.org/1999/xhtml\"> <head> <title>JS山寨桌面窗口</title> <meta http-equiv=\"Content-Type\" content=\"text/html; charset=UTF-8\" /> <style type=\"text/css\" media=\"screen\"> html, body, div { margin: 0; padding: 0; } html, body { background: #FFFFFF; width: 100%; height: 100%; overflow: hidden; } #box { position: absolute; top: 30%; left: 40%; width: 250px; height: 150px; background: #EEE; border: 1px solid #666; border-radius: 8px; box-shadow: 2px 2px 5px #777; } /*标题栏*/ #boxHeader { width: 100%; height: 30px; background: none!important; background: #EEE; border-bottom: 2px solid #AAA; border-radius: 5px 5px 0 0; } #button { float: right; width: 79px; height: 15px; margin: 5px 5px 0 0!important; margin: 5px 2px 0 0; background: #CCC; border-radius: 5px; } #button div { float: left; width: 25px; height: 15px; border-right: 2px #AAA solid; } #button .close { border: none; border-radius: 0px 5px 5px 0; } #button .minimize { border-radius: 5px 0 0 5px; } /*八个方向*/ /*用于显示变栏颜色,作为测试 #boxN, #boxE, #boxS, #boxW { background: red; } #boxNE, #boxES, #boxSW, #boxWN { background: green; } */ #boxN{ position: absolute; top: 0; left: 0; width: 100%; height: 5px; overflow: hidden; } #boxE{ position: absolute; top: 0; right: 0; width: 5px; height: 100%; overflow: hidden; } #boxS{ position: absolute; bottom: 0; left: 0; width: 100%; height: 5px; overflow: hidden; } #boxW{ position: absolute; top: 0; left: 0; width: 5px; height: 100%; overflow: hidden; } #boxNE { position: absolute; right: 0; top: 0; width: 5px; height: 5px; overflow: hidden; } #boxES { position: absolute; right: 0; bottom: 0; width: 5px; height: 5px; overflow: hidden; } #boxSW { position: absolute; left: 0; bottom: 0; width: 5px; height: 5px; overflow: hidden; } #boxWN { position: absolute; left: 0; top: 0; width: 5px; height: 5px; overflow: hidden; } /*显示按钮*/ #showButton { display: none; position: absolute; top: 50%; left: 50%; margin: -75px 0 0 -75px; width: 150px; height: 150px; } #showButton span { font: 50px bolder; } /*改变大小时的预览DIV*/ #virtualBox { position: absolute; background: #8EC6FF; border: 1px solid #147AFF; border-radius: 8px; opacity: 0.4; filter: alpha(opacity = 40); } </style> <script type=\"text/javascript\"> //拖扯box函数 var dragDiv = function() { var box = document.getElementById(\"box\"); var boxHeader = document.getElementById(\"boxHeader\"); var bDraging = false; var disX = disY = 0; //记录鼠标按下时距离box左、上边框距离 boxHeader.onmousedown = function(event) { bDraging = true; document.body.style.cursor = \"move\"; var event = event || window.event; disX = event.clientX - box.offsetLeft; disY = event.clientY - box.offsetTop; //拖动box document.onmousemove = function(event) { if(!bDraging) return false; document.body.style.cursor = \"move\"; var event = event || window.event; var boxX = event.clientX - disX; var boxY = event.clientY - disY; var maxX = document.body.scrollWidth - box.offsetWidth; var maxY = document.body.offsetHeight - box.offsetHeight; boxX = (boxX < 0) ? 0 : boxX; boxY = (boxY < 0) ? 0 : boxY; boxX = (boxX > maxX) ? maxX : boxX; boxY = (boxY > maxY) ? maxY : boxY; box.style.left = boxX + \"px\"; box.style.top = boxY + \"px\"; }; document.onmouseup = function() { bDraging = false; document.body.style.cursor = \"\"; }; return false; }; }; var changeSize = function() { var box = document.getElementById(\"box\"); var virtualBox = document.getElementById(\"virtualBox\"); var boxSide = document.getElementById(\"boxSide\").getElementsByTagName(\"div\"); var bSizeChanging = bMousedowning = false; //box是否正在改变 & 鼠标是否正在按下 var originalWidth = box.offsetWidth; //box最原始宽度 var originalHeight = box.offsetHeight; //box最原始高度 for(var i = 0; i < boxSide.length; i++) { //遍历boxside,监听鼠标 boxSide[i].index = i; boxSide[i].onmouseover = function() { if(bMousedowning) return false; changeCursor(true, this.index); }; boxSide[i].onmouseout = function() { if(bMousedowning) return false; changeCursor(false, this.index); }; boxSide[i].onmousedown = function(event) { var event = event || window.event; var index = this.index; var aBoxPrevious = new Array(); //记录box上一次的状态 aBoxPrevious[\"clientX\"] = event.clientX; aBoxPrevious[\"clientY\"] = event.clientY; aBoxPrevious[\"left\"] = box.offsetLeft; aBoxPrevious[\"top\"]= box.offsetTop; aBoxPrevious[\"width\"] = box.offsetWidth; aBoxPrevious[\"height\"] = box.offsetHeight; bMousedowning = true; bSizeChanging = true; showVirtualBox(virtualBox, aBoxPrevious); document.onmousemove = function(event) { if(!bSizeChanging) return false; changeVirtualBoxSize(event, aBoxPrevious, index); }; document.onmouseup = function() { changeBoxSize(virtualBox) hideVirtualBox(virtualBox); bSizeChanging = false; bMousedowning = false; changeCursor(false, index); }; return false; }; } //改变鼠标指针样式 var changeCursor = function(bIsShowing, index) { if(bIsShowing) { var cursorStyle = [\"n-resize\",\"e-resize\",\"s-resize\",\"w-resize\",\"ne-resize\",\"se-resize\",\"sw-resize\",\"nw-resize\"]; document.body.style.cursor = cursorStyle[index]; } else { document.body.style.cursor = \"\"; } }; //显示预览DIV var showVirtualBox = function(virtualBox, aBoxPrevious) { with(virtualBox.style) { display = \"block\"; top = aBoxPrevious[\"top\"] + \"px\"; left = aBoxPrevious[\"left\"] + \"px\"; width = aBoxPrevious[\"width\"] + \"px\"; height = aBoxPrevious[\"height\"] + \"px\"; } } //隐藏预览DIV var hideVirtualBox = function(virtualBox) { virtualBox.style.display = \"none\"; } //改变box大小 var changeVirtualBoxSize = function(event, aBoxPrevious, index) { var event = event || window.event; var bTop = bRight = bBottom = bLeft = false; //八个方向,分别为N、E、S、W、NE、SW、SW、NW switch (index) { case 0: bTop = true; break; case 1: bRight = true; break; case 2: bBottom = true; break; case 3: bLeft = true; break; case 4: bTop = bRight = true;; break; case 5: bRight = bBottom = true; break; case 6: bBottom = bLeft = true; break; case 7: bLeft = bTop = true; break; default: break; } //向北改变高度 if(bTop) { var newTopHeight = aBoxPrevious[\"height\"] - (event.clientY - aBoxPrevious[\"clientY\"]); (newTopHeight < originalHeight) && (newTopHeight = originalHeight); (newTopHeight > aBoxPrevious[\"top\"] + aBoxPrevious[\"height\"]) && (newTopHeight = aBoxPrevious[\"top\"] + aBoxPrevious[\"height\"]); var newTop = aBoxPrevious[\"top\"] + (event.clientY - aBoxPrevious[\"clientY\"]); (newTop > aBoxPrevious[\"top\"] + aBoxPrevious[\"height\"] - originalHeight) && (newTop = aBoxPrevious[\"top\"] + aBoxPrevious[\"height\"] - originalHeight); (newTop < 0) && (newTop = 0); virtualBox.style.top = newTop + \"px\"; virtualBox.style.height = newTopHeight - box.clientTop * 2 + \"px\"; //不能忽略border-width bTop = false; } //向东改变宽度 if(bRight) { var newRightWidth = aBoxPrevious[\"width\"] + (event.clientX - aBoxPrevious[\"clientX\"]); (newRightWidth < originalWidth) && (newRightWidth = originalWidth); (newRightWidth > document.body.scrollWidth - aBoxPrevious[\"left\"]) && (newRightWidth = document.body.scrollWidth - aBoxPrevious[\"left\"]); virtualBox.style.width = newRightWidth - box.clientTop * 2 + \"px\"; bRight = false; } //向南改变高度 if(bBottom) { var newBottomHeight = aBoxPrevious[\"height\"] + (event.clientY - aBoxPrevious[\"clientY\"]); (newBottomHeight < originalHeight) && (newBottomHeight = originalHeight); (newBottomHeight > document.body.scrollHeight - aBoxPrevious[\"top\"]) && (newBottomHeight = document.body.scrollHeight - aBoxPrevious[\"top\"]); virtualBox.style.height = newBottomHeight - box.clientTop * 2 + \"px\"; bBottom = false; } //向西改变宽度 if(bLeft) { var newLeftWidth = aBoxPrevious[\"width\"] - (event.clientX - aBoxPrevious[\"clientX\"]); (newLeftWidth < originalWidth) && (newLeftWidth = originalWidth); (newLeftWidth > aBoxPrevious[\"left\"] + aBoxPrevious[\"width\"]) && (newLeftWidth = aBoxPrevious[\"left\"] + aBoxPrevious[\"width\"]); var newLeft = aBoxPrevious[\"left\"] + (event.clientX - aBoxPrevious[\"clientX\"]); (newLeft > aBoxPrevious[\"left\"] + aBoxPrevious[\"width\"] - originalWidth) && (newLeft = aBoxPrevious[\"left\"] + aBoxPrevious[\"width\"] - originalWidth); (newLeft < 0) && (newLeft = 0); virtualBox.style.left = newLeft + \"px\"; virtualBox.style.width = newLeftWidth - box.clientLeft * 2 + \"px\"; bLeft = false; } }; var changeBoxSize = function(virtualBox) { with(box.style) { left = virtualBox.style.left; top = virtualBox.style.top; width = virtualBox.style.width; height = virtualBox.style.height; } } }; //窗口按钮函数 boxButton = function() { var box = document.getElementById(\"box\"); var boxHeader = document.getElementById(\"boxHeader\"); var aButton = document.getElementById(\"button\").getElementsByTagName(\"div\"); var showButton = document.getElementById(\"showButton\"); var span = showButton.getElementsByTagName(\"span\")[0]; var bIsMin = bIsMax = false; //目前状态是否最小 or 最大 boxHeader.ondblclick = function() { maximize(); } for(var i = 0; i < aButton.length; i++) { aButton[i].index = i; aButton[i].onmouseover = function() { aButton[this.index].style.background = \"#AAA\"; document.body.style.cursor = \"pointer\"; }; aButton[i].onmouseout = function() { aButton[this.index].style.background = \"\"; document.body.style.cursor = \"\" }; aButton[i].onclick = function() { switch(this.index) { case 0: minimize(); break; case 1: maximize(); break; case 2: close(); break; default: break; } }; } var minimize = function() { if(bIsMin) { resumeBox(); bIsMin = false; } else { box.style.width = \"89px\"; box.style.height = \"32px\"; box.style.left = \"2%\"; box.style.top = document.body.offsetHeight - box.offsetHeight - 15 + \"px\"; bIsMin = true; bIsMax = false; } }; var maximize = function() { if(bIsMax) { resumeBox(); bIsMax = false; } else { box.style.width = document.body.scrollWidth - 10 + \"px\"; box.style.height = document.body.scrollHeight - 10 + \"px\"; box.style.left = \"5px\"; box.style.top = \"5px\"; bIsMax = true; bIsMin = false; } }; var close = function() { box.style.display = \"none\"; showButton.style.display = \"block\"; }; var resumeBox = function() { box.style.top = \"30%\"; box.style.left = \"40%\"; box.style.width = \"250px\"; box.style.height = \"150px\"; }; showButton.onmousedown = function() { span.innerHTML = \"^o^\"; }; showButton.onclick = function() { this.style.display = \"none\"; span.innerHTML = \">_<\"; resumeBox(); box.style.display = \"block\"; }; }; window.onload = function() { changeSize(); dragDiv(); boxButton(); }; </script> </head> <body> <div id=\"box\"> <div id=\"boxHeader\"> <div id=\"button\"> <div class=\"minimize\"></div> <div class=\"maximize\"></div> <div class=\"close\"></div> </div> </div> <div id=\"boxSide\"> <div id=\"boxN\"></div> <div id=\"boxE\"></div> <div id=\"boxS\"></div> <div id=\"boxW\"></div> <div id=\"boxNE\"></div> <div id=\"boxES\"></div> <div id=\"boxSW\"></div> <div id=\"boxWN\"></div> </div> </div> <button id=\"showButton\"><span>>_<</span><p>居然关掉人家,讨厌~</p><p>快打开</p></button> <div id=\"virtualBox\"></div> </body> </html>
希望本文所述对大家的javascript程序设计有所帮助。
本文地址:https://www.stayed.cn/item/15744
转载请注明出处。
本站部分内容来源于网络,如侵犯到您的权益,请 联系我