手机
当前位置:查字典教程网 >编程开发 >Javascript教程 >用JavaScript实现仿Windows关机效果
用JavaScript实现仿Windows关机效果
摘要:基本原理分析Windows关机效果分析使用Windows系统的用户在关机的时候,出现的界面只允许用户选择关机、注销或取消动作,而桌面上的程序...

基本原理分析

Windows关机效果分析

使用Windows系统的用户在关机的时候,出现的界面只允许用户选择关机、注销或取消动作,而桌面上的程序都不能使用,并且屏幕呈现灰色状态。

本例将仿照这种高亮显示的效果在网页上实现.

在网页上运用这种关机效果有什么好处呢?首先,由于单击某一链接后,将用户此时不可用的操作隐藏在后台,将可用的操作放在屏幕最上层,并高亮显示,可以避免用户的误操作。其次,将信息高亮显示,也可以提醒用户应该注意的事项。

网页中实现关机效果分析

在网页中实现这种效果的原理很简单。创建两个图层,一个为遮盖层,覆盖整个页面,并且显示为灰色;另一个图层作为高亮显示的部分,在遮盖层的上方,这可通过设置图层的z-index属性来设置。当取消关机效果后,只需将这两个图层元素在页面中删除即可。

以下代码实现显示关机效果。

<html>

<head>

<title>AJAXLightBoxSample</title>

<styletype="text/css">

#lightbox{/*该层为高亮显示层*/

BORDER-RIGHT:#fff1pxsolid;

BORDER-TOP:#fff1pxsolid;

DISPLAY:block;

Z-INDEX:9999;/*设置该层在网页的最上端,设置足够大*/

BACKGROUND:#fdfce9;/*设置背景色*/

LEFT:50%;

MARGIN:-220px0px0px-250px;

BORDER-LEFT:#fff1pxsolid;

WIDTH:500px;

BORDER-BOTTOM:#fff1pxsolid;

POSITION:absolute;

TOP:50%;

HEIGHT:400px;

TEXT-ALIGN:left

}

#overlay{/*该层为覆盖层*/

DISPLAY:block;

Z-INDEX:9998;/*设置高亮层的下方*/

FILTER:alpha(opacity=80);/*设置成透明*/

LEFT:0px;

WIDTH:100%;

POSITION:absolute;

TOP:0px;

HEIGHT:100%;

BACKGROUND-COLOR:#000;

moz-opacity:0.8;

opacity:.80

}

</style>

</head>

<body>

<>

<divid="overlay"></div>

<>

<divid="lightbox"></div>

</body>

</html>

需要注意的是,在IE浏览器中如果有<select>标记,则该标记不能被覆盖层覆盖,但在其他浏览器中则可以覆盖。

在使用IE浏览器时,要先将网页中的<select>元素隐藏起来。如以下代码可以用于隐藏页面所有的<select>元素。

selects=document.getElementsByTagName('select');

for(i=0;i<selects.length;i++){

selects[i].style.visibility=visibility;

}

代码实现

客户端代码

客户端的页面上有两个链接,用户单击链接后,向服务器端发送请求,并将返回信息显示到高亮层上。客户端的网页文件代码如下所示:

<html>

<head>

<title>AJAXLightBox</title>

<>

<LINKhref="lightbox.css"type=text/cssrel=stylesheet>

<>

<scripttype="text/javascript"src="js/prototype.js"></script>

<>

<scripttype="text/javascript"src="lightbox.js"></script>

</head>

<body>

<DIVid=container>

<UL>

<LI><Aclass=lbOnhref="getInfo.jsp?id=one">One</A>

</LI>

<LI><Aclass=lbOnhref="getInfo.jsp?id=two">Two</A>

</LI>

</UL>

</div>

</body>

</html>

另外,还需要设置该页面所使用CSS样式。lightbox.css样式表文件代码如下所示:

#lightbox{

BORDER-RIGHT:#fff1pxsolid;

BORDER-TOP:#fff1pxsolid;

DISPLAY:none;

Z-INDEX:9999;

BACKGROUND:#fdfce9;

LEFT:50%;

MARGIN:-220px0px0px-250px;

BORDER-LEFT:#fff1pxsolid;

WIDTH:500px;

BORDER-BOTTOM:#fff1pxsolid;

POSITION:absolute;

TOP:50%;

HEIGHT:400px;

TEXT-ALIGN:left

}

UNKNOWN{

POSITION:fixed

}

#overlay{

DISPLAY:none;

Z-INDEX:5000;FILTER:alpha(opacity=80);

LEFT:0px;

WIDTH:100%;

POSITION:absolute;

TOP:0px;

HEIGHT:100%;

BACKGROUND-COLOR:#000;moz-opacity:0.8;opacity:.80

}

UNKNOWN{

POSITION:fixed

}

.done#lightbox#lbLoadMessage{

DISPLAY:none

}

.done#lightbox#lbContent{

DISPLAY:block

}

.loading#lightbox#lbContent{

DISPLAY:none

}

.loading#lightbox#lbLoadMessage{

DISPLAY:block

}

.done#lightboxIMG{

WIDTH:100%;HEIGHT:100%

}

客户端脚本

由于浏览器对图层的支持不同,所以首先要确定客户端浏览器的类型。以下代码可用于判断客户端的浏览器和操作系统。

vardetect=navigator.userAgent.toLowerCase();

varOS,browser,version,total,thestring;

functiongetBrowserInfo(){

if(checkIt('konqueror')){

browser="Konqueror";

OS="Linux";

}

elseif(checkIt('safari'))browser="Safari"

elseif(checkIt('omniWeb'))browser="OmniWeb"

elseif(checkIt('opera'))browser="Opera"

elseif(checkIt('Webtv'))browser="WebTV";

elseif(checkIt('icab'))browser="iCab"

elseif(checkIt('msie'))browser="InternetExplorer"

elseif(!checkIt('compatible')){

browser="NetscapeNavigator"

version=detect.charAt(8);

}

elsebrowser="Anunknownbrowser";

if(!version)version=detect.charAt(place+thestring.length);

if(!OS){

if(checkIt('linux'))OS="Linux";

elseif(checkIt('x11'))OS="Unix";

elseif(checkIt('mac'))OS="Mac"

elseif(checkIt('win'))OS="Windows"

elseOS="anunknownoperatingsystem";

}

}

functioncheckIt(string){

place=detect.indexOf(string)+1;

thestring=string;

returnplace;

}

下面看一下网页加载时需要添加的方法。有关网页加载和初始化方法代码如下:

//网页加载调用initialize和getBrowserInfo方法

Event.observe(window,'load',initialize,false);

Event.observe(window,'load',getBrowserInfo,false);

//未加载时清空缓存

Event.observe(window,'unload',Event.unloadCache,false);

//初始化方法

functioninitialize(){

//调用该方法为该页添加覆盖层和高亮显示层

addLightboxMarkup();

//为每个可高亮显示的元素创建lightbox对象

lbox=document.getElementsByClassName('lbOn');

for(i=0;i<lbox.length;i++){

valid=newlightbox(lbox[i]);

}

}

//使用Dom方法创建覆盖层和高亮层

functionaddLightboxMarkup(){

bod=document.getElementsByTagName('body')[0];

overlay=document.createElement('div');

overlay.id='overlay';

lb=document.createElement('div');

lb.id='lightbox';

lb.className='loading';

lb.innerHTML='<divid="lbLoadMessage">'+

'<p>Loading</p>'+

'</div>';

bod.appendChild(overlay);

bod.appendChild(lb);

}

封装lightbox类

初始化数据时,为每个可高亮显示的链接创建了lightbox对象。该类的代码具体实现如下:

varlightbox=Class.create();

lightbox.prototype={

yPos:0,

xPos:0,

//构造方法,ctrl为创建该对象的元素

initialize:function(ctrl){

//将该元素的链接赋值给this.content

this.content=ctrl.href;

//为该元素添加onclick事件activate方法

Event.observe(ctrl,'click',this.activate.bindAsEventListener(this),false);

ctrl.onclick=function(){returnfalse;};

},

//当单击链接时

activate:function(){

if(browser=='InternetExplorer'){//判断为IE浏览器

this.getScroll();

this.prepareIE('100%','hidden');

this.setScroll(0,0);

this.hideSelects('hidden');//隐藏所有的<select>标记

}

//调用该类中的displayLightbox方法

this.displayLightbox("block");

},

prepareIE:function(height,overflow){

bod=document.getElementsByTagName('body')[0];

bod.style.height=height;

bod.style.overflow=overflow;

htm=document.getElementsByTagName('html')[0];

htm.style.height=height;

htm.style.overflow=overflow;

},

hideSelects:function(visibility){

selects=document.getElementsByTagName('select');

for(i=0;i<selects.length;i++){

selects[i].style.visibility=visibility;

}

},

getScroll:function(){

if(self.pageYOffset){

this.yPos=self.pageYOffset;

}elseif(document.documentElement&&document.documentElement.scrollTop){

this.yPos=document.documentElement.scrollTop;

}elseif(document.body){

this.yPos=document.body.scrollTop;

}

},

setScroll:function(x,y){

window.scrollTo(x,y);

},

displayLightbox:function(display){

//将覆盖层显示

$('overlay').style.display=display;

//将高亮层显示

$('lightbox').style.display=display;

//如果不是隐藏状态,则调用该类中的loadInfo方法

if(display!='none')this.loadInfo();

},

//该方法发送Ajax请求

loadInfo:function(){

//当请求完成后调用本类中processInfo方法

varmyAjax=newAjax.Request(

this.content,

{method:'get',parameters:"",onComplete:this.processInfo.bindAsEventListener(this)}

);

},

//将返回的文本信息显示到高亮层上

processInfo:function(response){

//获得返回的文本数据

varresult=response.responseText;

//显示到高亮层

info="<divid='lbContent'>"+result+"</div>";

//在info元素前插入一个元素

newInsertion.Before($('lbLoadMessage'),info)

//改变该元素的classname的值

$('lightbox').className="done";

//调用本类中actions方法

this.actions();

varctrl=$('lightbox');

//为高亮层添加事件处理方法reset

Event.observe(ctrl,'click',this.reset.bindAsEventListener(this),false);

ctrl.onclick=function(){returnfalse;};

},

//恢复初始状态

reset:function(){

//隐藏覆盖层

$('overlay').style.display="none";

//清空返回数据

$('lbContent').innerHTML="";

//隐藏高亮层

$('lightbox').style.display="none";

},

//Searchthroughnewlinkswithinthelightbox,andattachclickevent

actions:function(){

lbActions=document.getElementsByClassName('lbAction');

for(i=0;i<lbActions.length;i++){

Event.observe(lbActions[i],'click',this[lbActions[i].rel].bindAsEventListener(this),false);

lbActions[i].onclick=function(){returnfalse;};

}

}

}

提示:由于该对象比较复杂,读者可以仔细参阅代码的注释部分。

服务器端代码

服务器端首先获得查询中的“id”值,如果该值为null或为空,则设置为默认值。然后判断该值,并且返回相应的一段字符串信息。处理请求的getInfojsp页面代码如下:

<%@pagelanguage="java"import="java.util.*"%>

<%

//获得请求中id的值

StringimgID=request.getParameter("id");

if(imgID==null||imgID.equals(""))//如果为null或为空

imgID="one";//设定为默认值

if(imgID.equals("one"))//如果为one

{

%>

<h3id="cartitle"style="border-bottom:1pxsolid#C0C0C0;margin-bottom:-5px">PorscheCarreraGT</h3>

<p>TheCarreraGThasa5.7litreV10internalcombustionenginethatproduces

605SAEhorsepower(451kW).Porscheclaimsitwillacceleratefrom0to100

km/h(62mph)in3.9secondsandhasamaximumspeedof330km/h(204mph).

With605hp,thecarweighs1,380kg(3,042lb).TheCarreraGTisonly

offeredwithasix-speedmanualtransmission,incontrasttoitsrivalthe

FerrariEnzothatisonlyofferedwithsequentialmanualtransmission.Also

theCarreraGTissignificantlylessexpensivethantheFerrariEnzo.The

FerrariEnzoispricedaround$660,000totheCarreraGT's$440,000.The

CarreraGTisknownforitshighqualityandreliabilitywhichmakesitoneof

thebestsupercarsever.

<%}else{//否则

%>

<h3id="cartitle"style="border-bottom:1pxsolid#C0C0C0;margin-bottom:-5px">FerrariTestarossa</h3>

<p>TheFerrariTestarossaisanV12mid-enginedsportscarmadebyFerrari.

Thename,whichmeans"redhead",comesfromtheredpaintedcylinderheadson

theflat-12engine.Theenginewastechnicallya180?Venginesinceitshared

flat-planecrankshaftpinswithopposingcylinders.Outputwas390hp(291

kW),andthecarwonmanycomparisontestsandadmirers-itwasfeaturedon

thecoverofRoad&Trackmagazineninetimesinjustfiveyears.Almost

10,000Testarossas,512TRs,and512Mswereproduced,makingthisoneofthe

mostcommonFerrarimodelsdespiteitshighpriceandexoticdesign.

<%}%>

【用JavaScript实现仿Windows关机效果】相关文章:

在JavaScript中正确引用bind方法的应用

javascript实现日期按月份加减

JavaScript函数使用的基本教程

JavaScript的9种继承实现方式归纳

javascript实现带下拉子菜单的导航菜单效果

JavaScript操作Cookie方法实例分析

JavaScript实现广告的关闭与显示效果实例

javascript实现查找数组中最大值方法汇总

JavaScript实现自动变换表格边框颜色

javascript实现控制的多级下拉菜单

精品推荐
分类导航