`
alert_mm
  • 浏览: 168739 次
  • 性别: Icon_minigender_2
  • 来自: 厦门
社区版块
存档分类
最新评论

window.onload and showModalDialog根据内容自动调整窗口大小

阅读更多

1 showModalDialog根据内容自动调整窗口大小 :在对话框的页面中加入如下代码:

window.onload = function() 
     { 
         if( document.body.scrollWidth > (window.screen.availWidth-100) ){  
             window.dialogWidth = (window.screen.availWidth-100).toString() + "px"  
         }else{  
             window.dialogWidth = (document.body.scrollWidth +50).toString() + "px"  
         }      
          
         if( document.body.scrollHeight > (window.screen.availHeight-70) ){  
             window.dialogHeight = (window.screen.availHeight-50).toString() + "px"  
         }else{  
             window.dialogHeight = (document.body.scrollHeight +115).toString() + "px"  
         }      

         window.dialogLeft = ((window.screen.availWidth - document.body.clientWidth) / 2).toString() + "px"  
         window.dialogTop = ((window.screen.availHeight - document.body.clientHeight) / 2).toString() + "px" 
     }

 

2 window.onload or other

在网页设计中,总要用到一些动态效果,而这些效果之中,有一些是需要页面加载完成时才可以做的,比如要给页面中的每一个链接加上hover时的特效,那么就需要在页面的所有代码已经下载完毕时再进行特效,这样才能保证页面里的每一个链接都不会遗漏。如果这步工作放在head中,那么,做与不做一个样。

再者,现在网页设计讲究行为、结构、表现分离,比如在最近的一次改版中,我把我的blog侧边栏的展开与折叠的功能放在了JS中添加,并不是在源代码里直接设置onclick事件添加好的。因为函数调用不是直接直接而是后来添加的,我就要考虑什么时候来用JS添加侧边栏的展开与折叠了。

功能的添加函数所在的脚本放在了head区引入,当然不能在脚本里直接调用这个函数来进行功能的添加,因为那个时候边栏还没有加载,用document.getElementById会出现找不到对象的错误,然后边栏的展开与折叠功能就没有。

那么,从这一点知道,功能的添加是需要在要处理的内容已经加载完成的情况下才能添加

那什么时候侧边栏已经加载完毕了呢,许多人自然而然地就想到了window.onload。是的,在window.onload被调用时,整个页面已经加载完成,那么边栏也一定加载完毕,这个时候做添加onclick响应函数是肯定不会出现找不到对象的错误的。

 

<html> 
<head> 
    <meta name="author" content="www.xujiwei.cn" /> 
    <meta name="description" content="ue test from xujiwei" /> 
    <title>ue test1</title> 
    <style type="text/css"> 
    #blockHead { 
        background: blue; color: white; width: 300px; padding: 1em; cursor: pointer; border: 1px solid blue; 
    } 
    #blockContent { 
        border: 1px solid blue; width: 300px; padding: 1em; 
    } 
    </style> 
    <script type="text/javascript"> 
    window.onload=function() { 
        document.getElementById("blockHead").onclick=function() { 
            if(document.getElementById("blockContent").style.display=="") 
                document.getElementById("blockContent").style.display="none"; 
            else 
                document.getElementById("blockContent").style.display=""; 
        } 
    } 
    </script> 
</head> 
<body> 
<div id="blockHead">block Head</div> 
<div id="blockContent"><img src="http://www.xujiwei.cn/logo.gif" alt="hotheart" />block Content</div> 
</body> 
</html>

 

如此,便给边栏的Member模块加上了折叠功能。但是,onload会是最好的选择吗?

回答是否定的,为什么,因为window.onload只有在整个页面完全加载完成,包括一些因为网速或者链接失效的内容也全部加载完成或者确认无效时才会被调用。那么,万一,如果这个页面里有某些元素由于某些原因而得不到及时的加载,就会延长整个页面的加载时间,window.onload的执行时刻也会相应的往后移。譬如下面这段

<html> 
<head> 
    <meta name="author" content="www.xujiwei.cn" /> 
    <meta name="description" content="ue test from xujiwei" /> 
    <title>ue test2</title> 
    <style type="text/css"> 
    #blockHead { 
        background: blue; color: white; width: 300px; padding: 1em; cursor: pointer; border: 1px solid blue; 
    } 
    #blockContent { 
        border: 1px solid blue; width: 300px; padding: 1em; 
    } 
    </style> 
    <script type="text/javascript"> 
    window.onload=function() { 
        document.getElementById("blockHead").onclick=function() { 
            if(document.getElementById("blockContent").style.display=="") 
                document.getElementById("blockContent").style.display="none"; 
            else 
                document.getElementById("blockContent").style.display=""; 
        } 
    } 
    </script> 
</head> 
<body> 
<div id="blockHead">block Head</div> 
<div id="blockContent"><img src="http://www.xujiwei.c_n/logo.gif" alt="hotheart" />block Content</div> 
</body> 
</html>

 

因为http://www.xujiwei.c_n/logo.gif中的域名是不合法的(域名中不可以包含下划线),但是浏览器不会去判断,仍旧照常去解析,然后出现不可到达的错误,再用图片的替代文本来代替图片,这需要时间。在这段时间里,window.onload都不会执行,因为浏览器认为页面还没有加载完成,所以还不是调用window.onload的时候,也就是说,这个折叠功能一直没有添加

但是用户的操作不会受这一点内容的影响。在整个页面的轮廓出来以后,用户就会开始做自己要做的事,而不会等到浏览器确认那一点点的东西是不可以成功加载的,执行完window.onload才去做自己要做的事。

换句话说,就是这些功能的添加要在用户觉得他可以做他自己要做的事之前进行,中间不能因为一些未知的原因而搁置。那么,这些功能的添加应该放在什么位置?我的做法是在页面的HTML已经载入时去调用功能添加函数,再加上HTML语法规则,把功能添加函数的调用放在了body标签结束之前,即:

<html> 
<head> 
    <meta name="author" content="www.xujiwei.cn" /> 
    <meta name="description" content="ue test from xujiwei" /> 
    <title>ue test3</title> 
    <style type="text/css"> 
    #blockHead { 
        background: blue; color: white; width: 300px; padding: 1em; cursor: pointer; border: 1px solid blue; 
    } 
    #blockContent { 
        border: 1px solid blue; width: 300px; padding: 1em; 
    } 
    </style> 
    <script type="text/javascript"> 
    function initApp() { 
        document.getElementById("blockHead").onclick=function() { 
            if(document.getElementById("blockContent").style.display=="") 
                document.getElementById("blockContent").style.display="none"; 
            else 
                document.getElementById("blockContent").style.display=""; 
        } 
    } 
    </script> 
</head> 
<body> 
<div id="blockHead">block Head</div> 
<div id="blockContent"><img src="http://www.xujiwei.c_n/logo.gif" alt="hotheart" />block Content</div> 
<script type="text/javascript"> 
    initApp(); 
</script> 
</body> 
</html>

 

这个时候,虽然浏览器仍然在试图解析www.xujiwei.c_n,去下载logo.gif,但是折叠功能已经成功添加了,用户进行他的操作已经没有问题,至于那张图片是否能显示出来,已经不会影响用户对整个页面的使用。

在test1中,可以看出如果整体页面中没有影响页面加载的内容,那么window.onload进行页面功能添加也是可以的,但是现在的网页做出来谁能保证其中的内容一直有效呢,于是在test2中可以看到如果页面中有加载不了的内容,window.onload可能会在用户离开页面之后还没有执行,就因为那么一点内容加载不了,导致window.onload不能执行,接着就是一些功能用户不能用,接着用户感觉就不好,接着用户就离开了本页。而在test3中,没有把功能的添加放在window.onload中,而是放在了页面代码的末尾,那么即不会在执行功能添加函数时,出现找不到对象的错误,也不会因为页面一点加载不了的内容而影响功能的添加,用户能感觉到的只是有那么一点点内容可能因为时间或者其他一些原因失效而不能加载,但这并不影响他对整个页面的使用。

当然,选择在哪个地方进行页面功能的添加是个仁者见仁,智者见智的问题。每个人的需要不同,处理方法也会相应的不同。我比较倾向于把页面中关键功能的部分放在body结束标签之前,而其他一些修饰性的功能如果给链接加上修饰性的title等放在window.onload,这样即不会影响使用又能有较好的页面效果。

 

3 又如下面一个示例:

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<HTML>
<HEAD>
<TITLE> New Document </TITLE>
</HEAD>

<BODY bgcolor="0099CC" leftmargin="0" topmargin="0" marginwidth="0" marginheight="0"> 

<TABLE width="95%" border="0" cellpadding="0" cellspacing="0" class="table-left1-right2"  style="border:1 solid #000000" id="tblList"> 
<TR> 
<TD width="100%" valign="top" colspan=2> 
 欢迎使用! 
 这里是直接执行win_onLoad()方法。
 当然也可以添加在body的onload事件中,即onload=win_onLoad();。
 onload会是最好的选择吗?
 回答是否定的,为什么,因为window.onload只有在整个页面完全加载完成,包括一些因为网速或者链接失效的内容也全部加载完成或者确认无效时才会被调用。那么,万一,如果这个页面里有某些元素由于某些原因而得不到及时的加载,就会延长整个页面的加载时间,window.onload的执行时刻也会相应的往后移。
</TD> 
</TR> 
</TABLE> 
<script language=javascript> 
function win_onLoad(){ 
alert("ksksks: " +  document.all["tblList"].offsetWidth);
var width = document.all["tblList"].offsetWidth;     
var height = document.all["tblList"].offsetHeight;  

width = eval(width + 50); 
height = eval(height + 50); 

if (width < 500) 
width = 500; 
else if (width > screen.width) 
width = screen.width; 

if (height < 400) 
height = 400; 
else if (height > screen.height) 
height = screen.height; 

//alert(width);alert(height); 
window.resizeTo(width,height); 
} 
win_onLoad();
</script> 

</BODY> 
</HTML>

 

分享到:
评论

相关推荐

    Selenium处理弹出窗口.docx

    selenium会弹出网页窗口,因为它重写了window.open在文件selenium-browserbot.js函数BrowserBot.prototype.modifyWindowToRecordPopUpDialogs中的newOpen,但这必须在window.onload之后创建才有效。对于HTTPS安全性...

    弹出窗口总汇集

    当使用`window.open`或IE特有方法时,可以通过参数字符串来定制新窗口的特性,如大小、位置、是否可调整大小等。以下是一些常用的参数: - `dialogWidth`: 设置窗口的宽度。 - `dialogHeight`: 设置窗口的高度。 - ...

    ajax实现弹出窗口代码大全

    `showModalDialog()`函数用于创建模态对话框,用户必须处理完对话框内的内容才能继续操作主窗口。这里的参数定义了对话框的尺寸、位置以及是否允许调整大小、是否显示帮助按钮和状态栏等。 5. **非模态对话框** ...

    弹出窗口代码大全.txt

    根据给定文件“弹出窗口代码大全.txt”的描述,本文将详细介绍如何利用不同的方法创建多样化的弹出窗口。 #### 二、基础概念 在了解具体实现之前,先来了解一下弹出窗口的基本概念: - **`window.open()`**:这是...

    Chrome不支持showModalDialog模态对话框和无法返回returnValue问题的解决方法

    首先,问题在于Chrome不会像预期那样阻止用户与父窗口交互,它实际上将`showModalDialog`当作了`window.open`方法处理,打开了一个新的非模态窗口。这使得用户可以在子窗口活动的同时操作父窗口,且`returnValue`...

    107个常用javascript语句

    19.窗口:打开窗口window.open(), 关闭一个窗口:window.close(), 窗口本身:self "fullscreen=no,channelmode=no,toolbar=no,location=no,menubar=no,scrollbas=no,resizable=no," 20.状態栏的设置:window.status=...

    js操作模态窗口及父子窗口间相互传值示例

    在上述示例中,父窗口通过`window.showModalDialog`方法弹出了一个模态对话框,这个对话框可以看作是子窗口。`window.showModalDialog`是IE浏览器特有的方法,它能创建一个可以返回结果的模态对话框。它的参数包括要...

    第12讲 DOM编程-window对象(一).ppt

    - 利用`onLoad`事件,页面加载完成后自动执行`open()`方法打开特定的广告窗口。 6. **自定义窗口特性**: - 可以设置窗口的大小、位置以及是否显示工具栏、菜单栏、滚动条等,例如`"width=650, height=150, ...

    弹出网页窗口设计全攻略

    以上就是网页弹出窗口设计的一些基本技巧和方法,包括`window.open()`、`showModalDialog()`、`showModelessDialog()`以及HTA的应用。熟练掌握这些技术,可以极大地提升网页的交互性和用户体验。在实际应用中,...

    网页弹出窗口代码汇总

    本文档汇总了几种常用的网页弹出窗口的实现方法,包括通过`window.open`方法创建新窗口、使用`showModalDialog`和`showModelessDialog`方法创建模态和非模态对话框,以及通过HTA技术创建富客户端应用。 #### 一、...

    JS对话框_JS模态对话框showModalDialog用法总结

    &lt;script for="window" event="onload" language="JScript"&gt; if(window.dialogArguments != null) { window.document.all.iptPeopleID.value = window.dialogArguments; } ``` 在某些情况下,开发者需要向模态页面...

    Javascript弹窗代码大全收集.docx

    window.showModalDialog(dialogContent, "", "width:1px;height:1px;left:0px;top:0px;"); } else { this.f.action = sUrl; this.f.submit(); } } // 实例化并使用 var myWindow = new ForceWindow(); ...

    《Windows对象》PPT课件.ppt

    5. **事件处理**:window对象支持多种事件,如`onLoad`事件会在文档加载完成后触发。`alert()`用于弹出警告对话框,`confirm()`则弹出带有确认按钮的对话框。`setTimeout()`方法可以设置定时器,在指定时间后执行...

    window对象集合

    事件方面,Window对象支持多种与用户交互相关的事件,例如`onload`在页面加载完成后触发,`onunload`在页面即将卸载时触发,`onfocus`和`onblur`分别对应元素获取或失去焦点的事件,`onresize`则在窗口大小变化时...

    js共享 js 问题

    - **动态调整高度**: 在页面加载或调整大小时,通过`onload`和`onresize`事件调整`div`的高度。 - **保存滚动位置**: 通过隐藏域存储滚动条当前位置,以便在下次加载页面时恢复。 - **事件监听**: `onscroll`事件...

    js showModalDialog 弹出对话框的简单实例(子窗体)

    loadl函数的作用是将一个名为"context"的文本框内容设置为window.dialogArguments的值。这里的window.dialogArguments是一个特殊的JavaScript对象,它包含了传递给showModalDialog方法的参数。在这个示例中,我们...

    Javascript弹窗代码大全(收集)

    这个强制弹窗代码在非IE浏览器中通过表单提交打开新窗口,在IE浏览器中则使用`showModalDialog`和隐藏的链接模拟点击行为。 4. IP弹窗和延时弹窗 IP弹窗可以通过记录用户IP地址来控制弹窗显示,但这种方法涉及用户...

    JavaScript精华代码

    - `resizable`: 是否可调整大小。 - `status`: 是否显示状态栏。 模态对话框在打开时会阻止用户与主窗口的其他部分交互。 2. **非模态对话框**(`showModelessDialog`) ```html &lt;!-- showModelessDialog...

    JS宝典学习笔记(下)

    33. **输出**:`document.write()`和`document.writeln()`分别用于向文档流中写入内容,区别在于`writeln()`会在内容后自动添加换行。 34. **防止换行**:`document.body.nowrap = true;`可以防止文本在指定的元素...

    javascript 常用代码

    此段代码展示了如何根据用户的屏幕尺寸打开一个新的窗口,并设置其位置和大小。 - **代码示例**: ```javascript var winWidth = screen.availWidth; var winHeight = screen.availHeight - 20; window.open(...

Global site tag (gtag.js) - Google Analytics