javascript窗口功能

######################JavaScript窗口功能指南之检查一个窗口是否存在

 当你创建一个新窗口时,给open()方法的返回值分配一个变量非常重要。比如,下面的语句创建一个新窗口,然后立即关闭它:

  win = window.open("http://www.docjs.com/", "js");

  win.close();

Window对象
  每一个浏览器窗口都与一个清楚地window对象对应,所以,当你想引用当前窗口时,你应该使用window对象。下面的语句设置当前窗口的URL:

  window.location.href = "http://www.docjs.com/";

  当你在脚本程序中放置这样一个语句时,你不需要指定window对象,因为当前窗口的存在是默认的:

  location.href = "http://www.docjs.com/";

  注意,self等价于window,所以,self.close()实际上就等于window.close()。

  当你想操纵一个窗口时,你必须确认它是存在的。在为window.open()方法定义一个变量时,要将它定义为全局变量并设置为null。记住,open()方法返回新窗口的window对象。这里是一个例子:

  var win = null;

  function launchWindow() {

   win = window.open();

   // statements that refer to the new window go here

  }

  如果你想对新窗口执行一个操作,你首先应该检查变量win是否为null:

  // if win exists, move the window

  if (win) win.moveTo(0, 0);

  注意,null等于false,同时任何其他合法的对象等价于true。如果win等于true,你就知道了它不是null,这意味着新窗口成功地创建了。

open "属性"
现在你知道了浏览器实际创建了新窗口。但是它仍然存在吗?不是必须的。你需要确认可用的窗口的确拥有一个真正的window对象。既然每个window对象对应于一个open()方法,你就可以通过对象探测检查到这个方法:
  // 如果win.open存在,就移动窗口

  if (win.open) win.moveTo(0, 0);

  变量win对照窗口的window对象,所以win.open对应window的window.open方法。注意,条件表达式是一个函数引用,不是一个函数调用。除非你确认win存在,你不应该试图估计win.open。下面的语句描述了正确的执行方法:

  // if win and win.open exist, move the window

  if (win && win.open) win.moveTo(0, 0);

  由于&&是一个短操作符号,如果第一个参数(win)对应于true,那么结果就取决于第二个数值。如果第二个参数是false,那么整个表达式结果就是false。这是一个很重要的行为,因为如果win不存在,那么表达式win.open就会产生一个错误。

closed 属性
  由于JavaScript的第一个版本,浏览器窗口成为一个非常困难的问题。比如,一个window对象的一些方法,例如close(),即使当窗口已经关闭时也能被执行,同时另外一些却不能(比如moveTo())。但是情况会更糟。Internet Explorer和Navigator经常有不同的行为。而且,预测一定操作的结果经常是非?/span>


#####################JavaScript窗口功能指南之引用已打开的窗口


 如果你想关联一个指定的窗口,你可以使用< A >标记的TARGET属性。除非你分配,一个浏览器窗口不会有一个名字。当你使用TARGET属性通过一个链接打开一个新窗口时,你就分配给它了一个清晰的名字:

  <A HREF="http://www.intel.com/" TARGET="review">Intel</A>

  前面的链接打开一个新窗口,名叫review。下面的链接通过JavaScript产生同样的效果:

  <A HREF="http://www.intel.com/"

   http://www.intel.com/', 'review'); return false">Intel</A>

  如你所见,给一个新窗口分配一个名字是非常简单的事情。但是,给一个存在的窗口命名,或者给一个用户产生的窗口命名,又会怎样呢?

  window对象的name属性可以让你通过JavaScript设置任何窗口的名字。如果你想建立一个新窗口,它可以关联父窗口的链接和表单,就一定要分配给打开者一个名字:

  window.name = "main";

  var map = window.open("newpage.html", "map");

  如果在newpage.html中包含了下面的链接,就会在父窗口中装载下面的页面:

  <A HREF="http://www.docjs.com/" TARGET="main">Doc JavaScript</A>

打开者的属性
  opener属性设置或者取回创建当前窗口的那个窗口的引用。当调用open()方法在目标窗口打开一个源文档时,opener属性(隶属于目标窗口的window对象)就定义了源文档所在的窗口。这个属性在打开的窗口中一直存在,所以即使新窗口中的URL改变时,它仍旧可以访问。

  opener属性是父窗口window对象的引用,所以你就可以充分利用这个属性,通过脚本程序,在新窗口中执行对打开窗口的任何操作。比如,在目标文档中使用下面的脚本程序去修改打开窗口的背景色彩:

  window.opener.document.bgColor = "beige";

  呵呵,如果你目光敏锐,你也许注意到上面这个语句的错误。我们必须检查是否打开窗口仍然存在,然后才能决定去修改它的相关属性。下面是正确的代码:

  if (window.opener && !window.opener.closed)

   window.opener.document.bgColor = "beige";

  opener属性非常有用,因为它建立了打开窗口与被打开窗口之间的双向联系。

  让我们给出个实际的例子,看看它是如果工作的,下面是出现在主页面上表单的HTML代码:

  <FORM >EnterINPUT TYPE="text" SIZE="10" VALUE="">

  <INPUT TYPE="button" VALUE="list" >

  </FORM>

  注意,表单的名字是stockForm,文本域的名字是stockBox,“list”按钮激活showList()函数。同时,在文档的

  < Body >标记中设置onUnload事件处理程序,它将执行remLink()函数。下面是这2个函数的代码:

  <SCRIPT LANGUAGE="JavaScript">

  <!--

  function showList() {

   sList = window.open("stocklist.html", "list", "width=150,height=210");

  }

  function remLink() {

   if (window.sList && window.sList.open && !window.sList.closed)

    window.sList.opener = null;

  }

  // -->

  </SCRIPT>

  当前文档被卸载时,remLink()函数设置子窗口的opener属性为null。新窗口中的脚本程序在分配文本域数值前检查opener属性。我们必须使用这个函数,因为如果一个不同文档在新窗口中被装载,这个窗口的脚本程序就不能访问文本框。

  下面是stocklist.html的代码:

  <HTML>

  <HEAD>

  <TITLE>Stock List</TITLE>

  <SCRIPT LANGUAGE="JavaScript">

  <!--

  function pick(symbol) {

   if (window.opener && !window.opener.closed)

    window.opener.document.stockForm.stockBox.value = symbol;

   window.close();

  }

  // -->

  </SCRIPT>

  </HEAD>

##################JavaScript窗口功能指南之操纵窗口
 一旦你得到了表示窗口的变量,你就能通过各种方法来操纵它。在前面的介绍中,我们讨论过close()方法:

  win = window.open("http://www.docjs.com/", "js");

  win.close();

  JavaScript提供了许多方法与属性,我们可以使用它们来控制窗口。

  移动、滚动、改变大小

  下面的方法(N4+,IE4+)负责个定窗口的移动、滚动以及大小改变操作:

  // 移动窗口的屏幕位置到指定的偏移x 、y(绝对移动)

  window.moveTo(iX, iY)

  // 移动窗口的屏幕位置到指定的偏移x 、y(相对移动)

  window.moveBy(iX, iY)

  // 滚动窗口的屏幕位置到指定的偏移x 、y(绝对滚动)

  window.scrollTo(iX, iY)

  // 滚动窗口的屏幕位置到指定的偏移x 、y(相对滚动)

  window.scrollBy(iX, iY)

  // 改变窗口大小到指定的高度与宽度(绝对改变大小)

  window.resizeTo(iWidth, iHeight)

  // 改变窗口大小到指定的高度与宽度(相对改变大小)

  window.resizeBy(iX, iY)

  注意,这些方法都属于window对象,所以它们智能在当前窗口或者其他可以引用的窗口被执行。如果你想动态设置窗口的位置和尺寸,就可以在窗口创建后使用move和resize方法。

  注意,控制一个包含其他服务器页面的窗口是不可能的。

最大化窗口
  我们现在来介绍如何制作一个点击后可最大化窗口的按钮。

  下面看看有关这个按钮的HTML和JavaScript代码:

  <SCRIPT LANGUAGE="JavaScript">

  <!--

  function maximizeWin() {

   if (window.screen) {

    var aw = screen.availWidth;

    var ah = screen.availHeight;

    window.moveTo(0, 0);

    window.resizeTo(aw, ah);

   }

  }

  // -->

  </SCRIPT>

  <FORM><INPUT TYPE="button" VALUE="Maximize" ></FORM>

  注意,resizeTo()方法引用整个窗口的尺寸。

一个悬浮的广告
  在网站上,通过移动广告窗口,能够吸引浏览者的注意力。我们可以通过调用下面的函数来实现让窗口左右移动的效果:

  function makeAd() {

   window.open("adpage.html", "ad", "width=468,innerWidth=468,height=80,innerHeight=80,left=0,top=0");

  }

  下面是页面adpage.html的代码:

  <SCRIPT LANGUAGE="JavaScript">

  <!--

  function startAd() {

   if (window.screen) {

    pos = 0;

    aw = screen.availWidth;

    window.moveTo(pos, 0);

    timerID = setInterval("moveAd()", 50);

   }

  }

  function moveAd() {

   if (pos <= 0) inc = 5;

   // 5 - so it doesn't pass the right edge

   // 10 - accounts for the window chrome

   if (pos + 468 + 10 + 5 > aw) inc = -5;

   pos += inc;

   window.moveTo(pos, 0);

  }

  window.onload = startAd;

  // -->

  </SCRIPT>

  当页面adpage.html装载后,函数startAD()被执行。如果用户的浏览器支持window.screen对象,窗口才能移动,因为我们需要使用window.screen来计算屏幕的宽度。窗口在屏幕的上边界滑动,从左上角(pos=0)一直到右上角。

  通过内建的setInterval()函数,每隔50毫秒移动广告窗口5个象素。如果点击了“stop”按钮,就将执行下面的语句:

  clearInterval(timerID);

震动的窗口
  如你所见,move方法能帮助你吸引用户的注意力。如果你想让访问者更加震撼,你也许想加入下面的效果:

  <SCRIPT LANGUAGE="JavaScript1.2">

  <!--

  var quakeID = 0;

  var totalX = 0;

  var totalY = 0;

  // max pixels in each movement

  var maxShift = 10;

  // min movements in each quake

  var minJumps = 10;

  // max movements in each quake

  var maxJumps = 40;

  // min milliseconds between two quakes

  var minBetweenQuakes = 1000;

  // max milliseconds between two quakes

  var maxBetweenQuakes = 4000;

  function jump() { // -maxShift to maxShift

   with (Math)

    return (maxShift + 1 - ceil(random() * (maxShift * 2 + 1)));

  }

  function winShake() {

   for (var i = 0; i < (minJumps + (Math.random() * (maxJumps - minJumps))); i

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值