html在桌面实现窗口,JavaScript实现模仿桌面窗口的方法

这篇文章主要介绍了JavaScript实现模仿桌面窗口的方法,可实现模仿桌面窗口的打开、关闭、移动、缩放及最大化、最小化等功能,需要的朋友可以参考下,具体如下:

这里使用JS模仿了桌面窗口的移动、八个方向的缩放、最小化、最大化和关闭,以及 双击缩小放大窗口、改变窗口大小的预览效果等功能。/p>

"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

JS山寨桌面窗口

html, body, p {

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 p {

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;

}

/*改变大小时的预览p*/

#virtualBox {

position: absolute;

background: #8EC6FF;

border: 1px solid #147AFF;

border-radius: 8px;

opacity: 0.4;

filter: alpha(opacity = 40);

}

//拖扯box函数

var dragp = 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("p");

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 = "";

}

};

//显示预览p

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";

}

}

//隐藏预览p

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("p");

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();

dragp();

boxButton();

};

>_<

居然关掉人家,讨厌~

快打开

以上就是本章的全部内容,更多相关教程请访问JavaScript视频教程!

声明:本文原创发布php中文网,转载请注明出处,感谢您的尊重!如有疑问,请联系admin@php.cn处理

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值