旗下网站:橡胶人才网

 找回密码
 注册
查看: 3389|回复: 0

[分享]制作Javascript弹出窗口技巧九则

[复制链接]
发表于 2006-7-14 05:48:22 | 显示全部楼层 |阅读模式

马上注册,结交更多胶友,享用更多功能!

您需要 登录 才可以下载或查看,没有账号?注册

×
  经常上网的朋友可能会到过这样一些网站,一进入首页立刻会弹出一个窗口,或者按一个连接或按钮弹出,通常在这个窗口里会显示一些注意事项、版权信息、警告、欢迎光顾之类的话或者作者想要特别提示的信息。其实制作这样的页面效果非常的容易,只要往该页面的HTML里加入几段Javascript代码即可实现。下面俺就带您剖析它的奥秘。
/ E& Q( M# a: y5 J& [# Y" i2 {
; ]4 c# e* M) z! d  1、最基本的弹出窗口代码 5 o0 V7 k* S4 p2 ]) U

+ j+ p6 K% {, k8 {  其实代码非常简单:
& {. |# h) {0 e; h, Z7 i* I& y# B, U* q( L+ ]) ]8 Z
  < SCRIPT LANGUAGE="javascript">2 s" }) s, \4 Z4 C+ h) U
7 C+ J( S1 l5 ~. H0 _
  < !--
0 Y" J# w* F5 T9 t+ j+ A; P4 G3 D5 G0 ^
  window.open ("page.html")6 J5 _# K9 @9 c' `& d

/ ?2 R  [+ u. f4 M3 b  -- ) I' H$ p. a$ d' m* X
>
1 j7 j: {* ^0 V  L  V4 |: M2 d% C6 ?
  < /SCRIPT>
3 ^' r2 l. @- K
, d' w: N7 c/ z, Q0 b+ {7 e  因为这是一段Javascript代码,所以它们应该放在< SCRIPT LANGUAGE="javascript">之间。 < !-- 和 -->是对一些版本低的浏览器起作用,在这些老浏览器中不会将标签中的代码作为文本显示出来。要养成这个好习惯啊。
9 V5 f8 [" \- s7 J8 x
1 b$ k/ l, r# z; V# `/ [  window.open ("page.html") 用于控制弹出新的窗口page.html,如果page.html不与主窗口在同一路径下,前面应写明路径,绝对路径(http://)和相对路径(../)均可。
% p7 Q: @0 o& E. a0 C6 O7 `( i9 F/ F
  用单引号和双引号都可以,只是不要混用。
: F, w, K: G. ^8 `. Y& \( b. f( S& S$ }3 d$ i
  这一段代码可以加入HTML的任意位置,< head>和< /head>之间可以,< body>间< /body>也可以,越前越早执行,尤其是页面代码长,又想使页面早点弹出就尽量往前放。 也可以,越前越早执行,尤其是页面代码长,又想使页面早点弹出就尽量往前放。
2 c1 a+ S! A8 F. }; j/ c! {8 a7 D# R& N( U5 Q
  2、经过设置后的弹出窗口 : H8 ]; z- r( [. |7 ]2 V5 R  ^/ l

7 m: _& L/ U* C4 |- A' w1 k7 \  下面再说一说弹出窗口的设置。只要再往上面的代码中加一点东西就可以了。我们来定制这个弹出的窗口的外观,尺寸大小,弹出的位置以适应该页面的具体情况。
- h1 u; p, w3 H, p9 L
' G  \( A, r, x% l  < SCRIPT LANGUAGE="javascript">
, L, z* }7 J* Z: e: g9 s. X
6 G. Y3 X$ B" A: x6 K  < !--
4 t  S5 s+ p( d5 e7 v+ m% n0 D
  window.open ("page.html", "newwindow", "height=100, width=400, top=0, left=0, toolbar=no, menubar=no, scrollbars=no, resizable=no,location=no, status=no")# R. F* P4 n' J! l# J

, n! {  L" u4 f1 w, B3 H3 {9 M" O2 O  //写成一行! C" a1 @# f; c

1 |5 N+ E' `1 c( Q  -->: \, C; c; J$ _" ^+ Z+ o8 ?5 v7 u

# Q4 m4 F) f! w) L% H  < /SCRIPT>
: Y( T+ W* L* o6 C8 g0 p5 [* K! ^
3 G1 @. o: `/ U0 @1 X. O, u  参数解释: ( X8 |1 z" ?$ Z$ D- C

' y5 U- z- |; \  w$ J  < SCRIPT LANGUAGE="javascript"> js脚本开始;
/ Z$ A" x- D/ W" D/ A, m3 n1 Y* S
4 A3 }4 _3 }6 z( L5 O  window.open 弹出新窗口的命令;6 ]) E4 s% _+ q) X. i, u
+ J, T  T; m1 K; G" R
  "page.html" 弹出窗口的文件名;& m5 }' R7 R; k" I& _; l
4 g3 y3 C7 Q5 q2 x- B  E' X+ O
  "newwindow" 弹出窗口的名字(不是文件名),非必须,可用空"代替;
9 b# B0 |8 w$ ?- K/ H) E; A8 X. X8 B
  height=100 窗口高度;
- z4 k" I7 B  x, g7 w7 B6 X7 [
( _# C& x# j# @' S3 u' l  width=400 窗口宽度;% ^& |6 U4 M! f, }+ ^
" r# k1 b. B) S& K& G
  top=0 窗口距离屏幕上方的象素值;
( R' P$ f' b; B2 j8 N) p) [/ o- Z! x2 v9 I4 d& \6 B9 V& b! P# Z7 ^
  left=0 窗口距离屏幕左侧的象素值;2 h/ V5 T+ E9 x- _+ P% r( T4 v/ J4 m( D

! r' P+ a( [% b  toolbar=no 是否显示工具栏,yes为显示;
2 E- b* \6 r8 z4 F6 R7 A9 K" _' X; O& l& u1 _) A% Q) l
  menubar,scrollbars 表示菜单栏和滚动栏。
5 p) y6 u5 w, m" r7 Z: r% t2 K' w2 y, S4 E# \, _. X! W. m
  resizable=no 是否允许改变窗口大小,yes为允许;2 O# ~6 I/ R) h, y! R$ m
9 _# e/ a, r8 I" t9 d
  location=no 是否显示地址栏,yes为允许;
: o% i6 i" C3 I4 t# g% O; `' U2 V$ R) O1 R' N% V8 k" o& Z
  status=no 是否显示状态栏内的信息(通常是文件已经打开),yes为允许;
# Q; b) l3 h" [; e+ S& ~# {  a1 l$ Y
  |6 [  s9 P3 n. G  < /SCRIPT> js脚本结束
: m2 P* p7 H& Y4 e3 T% T4 Q4 d* E" j  Q9 G. M9 I
  3、用函数控制弹出窗口
" U5 p& k( q' k7 W+ Y% i2 H  P" O# v0 _0 g
  下面是一个完整的代码: + v8 W7 W: t( Y7 O8 L1 y
. e6 n, f' J6 w
  < html>7 d- s. r  H# `: \. m: c* S+ L$ f
. R! B7 t; n' G! x# B
  < head>% H2 b; |; t6 N2 p$ S
* h7 B7 [$ _3 `
  < script LANGUAGE="JavaScript">0 T2 ^; m$ _, `2 R$ V- ]

% B! a+ n8 C+ [: {; O$ x2 }5 t  < !--+ q8 V* D% f8 g% I9 h! ~8 m

; L2 J$ N) Q/ Q3 }- M  function openwin() {/ w4 Q, F# j! G- l) D  N. s
: q4 l( n! K9 t/ E$ g9 u1 S" H5 }
  window.open ("page.html", "newwindow", "height=100, width=400, toolbar=no, menubar=no, scrollbars=no, resizable=no, location=no, status=no")' K5 r; x- r1 R: q( E' \/ {0 b
2 F8 C% z0 h8 y/ Z1 Z" U
  //写成一行4 x1 P2 P# Y$ D3 p; w

8 _: a7 ~. m) P# H7 h6 k9 I( ]  }- O* P8 G* R" P& X* M4 R5 \$ C

( O7 R3 M3 s$ B- B; r" }  //-->8 E! X) X$ P/ a7 p' h. `  W( o
$ f: T7 `$ v. m& R  G
  < /script>9 J' B; ?: D6 `; y

7 R7 V$ V9 E/ O; e5 P  < /head>
$ i: z+ ]' \( N6 n- E6 ^6 D
' \9 D1 h( W: T  @- z$ J6 `  < body onload="openwin()">
; v) }( j& R; y6 m% E/ N) H- c5 {, G2 P* i! n
  ...任意的页面内容...
! W! ~+ C7 y5 j  ]7 n! m3 Z. ?) r0 P8 K' i- t; [' s# u( W
  < /body>, n' f  q: @; x) W& }- \- Y- J
; B6 [$ c% T5 c
  < /html>
+ e- c0 `1 O4 w% f* t
4 K4 y$ M5 k* g  这里定义了一个函数openwin(),函数内容就是打开一个窗口。在调用它之前没有任何用途。+ J7 ~, j! P. S5 F" e0 h

& L8 ?( m$ E) N, A: d/ X* Q/ ^  怎么调用呢?
$ x( h+ O8 O# b/ _. a( _4 e- K# L. w$ v0 a4 r+ r- L
  方法一:< body onload="openwin()"> 浏览器读页面时弹出窗口;5 b  J8 g8 ^" Y! P) }! k) K, ?4 ]
# \  n; x  X! [! D) D
  方法二:< body onunload="openwin()"> 浏览器离开页面时弹出窗口;
. ^8 m7 ~' U1 b' j( u/ B) B0 W+ @0 R$ `) D/ ^. v
  方法三:用一个连接调用:< a href="#" onclick="openwin()">打开一个窗口< /a>4 }3 G% D& P" U; P
' [$ O) C2 z+ g) e
  注意:使用的"#"是虚连接。
9 p/ K% y* \0 ^6 t5 e1 d9 @, I! m5 T0 @% M1 l% m( V% B+ A; {, n# W
  方法四:用一个按钮调用:< input type="button" onclick="openwin()" value="打开窗口">
! w' B) C0 O# w" r# M' ^! V4 l
0 q* Y. w7 O5 j% ~  4、同时弹出2个窗口
  B9 C0 j7 y* [0 q: N" e" h+ W7 I) @% @7 F$ u  ^: }: L) v! a
  对源代码稍微改动一下:- r4 |  T+ }% r% V' Z
; {1 f& }" b+ h& |" }5 Q8 O+ q* B% e
  < script LANGUAGE="JavaScript">  b6 B# c$ }, I) A( y

# u6 b% {: r" F4 d  s6 A  < !--4 r) m9 f$ A+ E% x
) [6 Q7 ]* O3 }
  function openwin() {
# O. A& h* Z9 ?# A4 N; _. ^  ~" B2 K% z- x
  window.open ("page.html", "newwindow", "height=100, width=100, top=0, left=0,toolbar=no, menubar=no, scrollbars=no, resizable=no, location=no, status=no")2 P- T8 B( u5 E: r" j% c3 u1 [
7 S( R% K  P. w6 I2 u
  //写成一行
1 t# k6 f! D& F. N/ J. N: V0 }9 Y( s4 a
  window.open ("page2.html", "newwindow2", "height=100, width=100, top=100, left=100,toolbar=no, menubar=no, scrollbars=no, resizable=no, location=no, status=no")/ t1 p8 O/ v9 ^2 p8 Y5 S9 Z
1 L+ V- X. a9 h$ u  Q7 g9 B
  //写成一行4 P6 G8 G, o0 O

# D+ ~. R) p, a  }
) @* m8 g, P. B2 M8 a, f/ [- V8 x3 J, _6 K2 y
  //-->
( G9 V* r! M8 b: k, T, E. R9 G
6 {/ w% V- K$ P. b, x  d" K  F: J' \  < /script>! x3 n% B8 z$ z$ S6 ^, P

* [* x2 }, e3 z3 Y/ B2 j' Y  为避免弹出的2个窗口覆盖,用top和left控制一下弹出的位置不要相互覆盖即可。最后用上面说过的四种方法调用即可。
8 x; x( m& C8 V) y+ v! O
! m1 ^" T. t1 w  注意:2个窗口的name(newwindows和newwindow2)不要相同,或者干脆全部为空。OK?5 @, O# `: V2 W; e

/ R! r1 g8 p1 ~# ~  5、主窗口打开文件1.htm,同时弹出小窗口page.html
, `3 I+ g6 X* `/ X- @4 C
( [7 J8 f5 L5 L) h( K6 g  如下代码加入主窗口< head>区:
5 A( t5 b. F2 |- B  _& K3 J1 l7 _; d0 @: F
  < script language="javascript">. ?7 w. D) s$ n9 n, g
; [0 x9 t( B, [6 F1 b
  < !--: M) D! E" _+ O1 ^- p+ X% X0 {
$ S( @/ T7 f, I$ R4 x3 T- K* r
  function openwin() {
: L, ?% m1 @" J: R
5 H4 P" u$ U0 o2 V; ?  window.open("page.html","","width=200,height=200")+ z) D$ S; m$ a! ^# R( p' D

  ~1 W) w+ i( L& H  }
' {+ p- M2 A# C7 S& H# S; T" S) H7 x0 r+ n
  //-->+ r6 Q' f- T$ n8 S6 ^
9 P" b8 ^: C% r; `2 ]. U6 [
  < /script>
% h3 j9 h$ I% h1 N8 Q6 d
' C! c% Z$ [$ R, ^; l  加入< body>区:
0 x" G' l4 f# u# A3 c# G0 G
2 E0 H8 ~/ i, t* O- x: F" b  < a href="1.htm" onclick="openwin()">open< /a>即可
6 c/ B, i( k- P3 F& G' \; |! _+ r- o3 t( |$ T; N: A# r% `, I
  6、弹出的窗口之定时关闭控制
1 z+ J! x# R! {9 Y* D! W  G( `/ N7 y( r+ V  S5 {3 o& |5 T* o
  下面我们再对弹出的窗口进行一些控制,效果就更好了。如果我们再将一小段代码加入弹出的页面(注意是加入到page.html的HTML中,可不是主页面中,否则...),让它10秒后自动关闭是不是更酷了?
- h* Q! i: _3 J' ?# b) ~: m9 X5 E/ O2 ^  o" [
  首先,将如下代码加入page.html文件的< head>区:& \6 g4 F1 k+ q+ \3 b
, v* p- m3 X1 T$ L
  < script language="JavaScript">
1 B3 A, O7 W$ V3 x  B$ g  \$ [3 Q* L& O' u
  function closeit() {" h3 Z; S; P5 I, q) n9 J

9 s. ?7 z# [0 P& X- p  setTimeout("self.close()",10000) //毫秒+ N, V7 h$ B% F5 M- X& S
; T) o( L$ E1 a: c
  }! r/ d& n- D" ?* N; }# W

+ K5 G" q3 E+ A% N  < /script>" p! [: G% T: ^0 n1 ^

) `$ d$ s4 q- {3 y8 q  然后,再用< body onload="closeit()"> 这一句话代替page.html中原有的< BODY>这一句就可以了。(这一句话千万不要忘记写啊!这一句的作用是调用关闭窗口的代码,10秒钟后就自行关闭该窗口。)
& Z, J' A& T. Y" D. x% }
  O" `0 M) H2 h( B0 l  7、在弹出窗口中加上一个关闭按钮
; e& Y- H# G& ^, B* `- y
" S2 Z4 d; J- C! r5 t  < FORM>
0 }" E; w( {  q3 X. L- J1 A  v
% j3 t1 u0 M/ R% O7 E% x  < INPUT TYPE="BUTTON" VALUE="关闭" onClick="window.close()">
# X$ O/ ]; \& \- y. D+ `9 a! b) `9 L! ~
- u9 J! _( N  ]9 C: V+ t$ _  < /FORM>
. u5 R. D/ p$ A/ L3 \* e
7 H" |4 g6 E/ e  呵呵,现在更加完美了!
6 P  @% E# I) P! u: A" b  E9 \$ d6 {4 e# O
  8、内包含的弹出窗口---一个页面两个窗口 * b* M1 N+ M- y& t% o

& @: @5 N2 j$ b0 N* C7 z; x1 S  上面的例子都包含两个窗口,一个是主窗口,另一个是弹出的小窗口。通过下面的例子,你可以在一个页面内完成上面的效果。 0 J7 f; b# i, f, |6 `

1 v: F6 Q# f: g  < html>( p: Q1 S9 e& `, [
# J  _& C9 z' n, Q: V$ L
  < head>: Q: |/ }5 K* x+ f& c, m

, [7 L* R3 p1 x, d# c  < SCRIPT LANGUAGE="JavaScript">
. l$ R" o6 p; S) I; x# q" A4 A  H. U% i# d9 k
  function openwin()* n- H3 b2 t" _* w

; k3 Y8 O5 K$ p: A; v( h  {' X; s+ u* ^$ y/ _% m

5 F  S2 d3 `4 K- V: K  OpenWindow=window.open("", "newwin", "height=250, width=250,toolbar=no,scrollbars="+scroll+",menubar=no");
% x0 O3 o$ l5 c; }: w
4 M* x* _+ B* T: L( V  //写成一行) \1 t! s* ~+ C9 A+ y  P9 B
* D5 o1 b! j( o
  OpenWindow.document.write("< TITLE>例子< /TITLE>")
3 A6 e3 W) f8 k! c
  ]" C* \1 {* ^) {/ j/ M  OpenWindow.document.write("< BODY BGCOLOR=#ffffff>")/ g( v3 l! S- n1 e0 X

8 g( P* J& N% u$ c/ }2 s  OpenWindow.document.write("< h1>Hello!< /h1>")! h: u  I6 U# d% F
$ L5 @* w3 ?; i; R, f8 j3 R9 A
  OpenWindow.document.write("New window opened!")5 i- D. Z5 O2 `: {4 {% b

: z- p2 J  v% `  OpenWindow.document.write("< /BODY>")' u7 t: z0 r) q& \+ v# g. m" o

% V1 {2 R# q: [4 z7 Q3 ^5 g  OpenWindow.document.write("< /HTML>")
' D" w; d; d$ c! j9 k9 }4 k7 e+ ^( Y: t1 D
  OpenWindow.document.close()5 p! X) R) M( @3 f/ z5 h% H

0 j0 k, L! Z1 B5 ~  }
8 Z9 l' }& v4 p* J! J$ v, g; w- C1 S- U" P) I' o6 j
  < /SCRIPT>) R8 j* O; L2 W4 n; |4 ^
  R% a& W0 q( a# a3 J* {
  < /head>
+ j# F% l& O- V4 T; ]( ^& Z: R+ {. A, K! k& Y+ u6 b
  < body>
# s3 X0 q# p/ Y$ B- _: F) V. V
3 a/ y$ z4 A, O; }; {2 J  < a href="#" onclick="openwin()">打开一个窗口< /a>' o4 q' e8 g+ V( @8 N5 B2 B/ i- w
+ w+ o) ?0 {7 G- r0 t( q) B
  < input type="button" onclick="openwin()" value="打开窗口">! o% ]7 P. b0 b! e& a2 U

  z" E; ~! \& `- l1 ?4 x  < /body>
* o6 e3 t* Y0 F2 b6 k& i
$ H- s( H( ^' c) {7 s  < /html>
( v/ a! y* d/ l' o6 X  z$ U8 D+ }/ V) H) v) [7 D% t
  看看OpenWindow.document.write()里面的代码不就是标准的HTML吗?只要按照格式写更多的行即可。千万注意多一个标签或少一个标签就会出现错误。记得用OpenWindow.document.close()结束啊。 $ }. n. e2 r; P- N
; y) c5 e8 v3 J* [
  9、终极应用--弹出的窗口之Cookie控制 7 S. e+ @% L8 ]6 N* k' \6 F$ u

+ u! O" Z  e$ t  回想一下,上面的弹出窗口虽然酷,但是有一点小毛病(沉浸在喜悦之中,一定没有发现吧?)比如你将上面的脚本放在一个需要频繁经过的页面里(例如首页),那么每次刷新这个页面,窗口都会弹出一次,是不是非常烦人?:-( - s5 c# p) ?( i- O
, f+ U1 j1 C/ B& `
  有解决的办法吗?当然有!我们使用cookie来控制一下就可以了。首先,将如下代码加入主页面HTML的< HEAD>区:/ e; d: d: w0 d7 o" \) Z0 _, X$ s% I
9 T- Y* O6 a. t
  < script>2 m- Y" n$ H2 ?" a; w% q: e2 u

- s7 C; l; h' B  e9 ^5 A  function openwin(){  O  `, F/ U" j& N7 q% S) @3 V0 B; [
; w) M8 j& [1 `/ O' W( l$ i+ u3 @
  window.open("page.html","","width=200,height=200")
/ {. [" J' i/ i) U
2 S: a0 W* z" @/ U5 E) ]  }- X7 ]* i$ E  Q' |
, X, a7 G8 w  ?; z/ _6 M* {
  function get_cookie(Name) {
' D. T: ]" h( }1 }# K- N  i' \% p- V: W7 ]% t! n
  var search = Name + "=" var returnvalue = "";
! w4 G  G5 T" A
& x& u; P( ^2 s: ~/ Z1 ]/ G  if (document.cookie.length > 0) {/ J. x1 h& q% E$ z: c
8 k3 `4 b; t. l- ?
  offset = document.cookie.indexOf(search)
) x) w; j8 e; `$ Q: V/ N6 o! L
. l1 _6 i0 c/ h# @' ?4 c& O  if (offset != -1) {
" Y1 m9 \! J7 L/ J- O+ E% I7 s5 {
: B9 F. {' @! X" L; f  ~4 A  offset += search.length
2 P: {( q9 e+ s3 }8 h
4 b) n" L) ]% A  end = document.cookie.indexOf(";", offset);
6 E  y* ^% }4 W  n
% f5 V/ \2 y' Y! q; D: Y  L- w3 x8 i  if (end == -1)' D# w+ D/ ~" M) T
& l/ v* I7 Z4 Q9 ~  |9 ^& g
  end = document.cookie.length;2 s% U5 P6 J: f" {6 G

" p+ a4 [( z6 {  returnvalue=unescape(document.cookie.substring(offset, end))" c9 D, w2 q7 t% C2 M$ }% f3 G- n" @# u8 O

' R! U+ D: ?7 Q5 G4 y, {4 S  }( n1 `1 `8 w2 ^% G; Q+ ]

. a7 j9 W- Y7 X  }
% ~- c; ]) p% ~+ o; p6 Y7 x
& K  n7 h8 J# t5 y; c8 r9 |  return returnvalue;
; ~# n- m6 ~$ M8 g+ j
  W; e( P# R2 i/ g% W! `  w1 \  }
1 T/ P$ l. }$ [
! ]( ~$ a/ `$ d! e3 o2 w( ]1 ]  function loadpopup(){' ]+ G4 n" o: v
' ]) R. G0 m- w5 m, h! {# _, a
  if (get_cookie("popped")=="){
  ]1 w) F3 Z, x' H7 G$ W0 D
1 ?9 D) p/ N3 i7 g# w& T  openwin()
0 W& d- s& d8 a- X' x* {
8 \5 f4 }  C1 p3 b0 k  document.cookie="popped=yes"
$ S* r$ k  @' @! E- ^% _; [
( b* q* ^; i8 ?6 G1 C  }
8 v" e# n- z: y; P, p. @2 w  o9 Y
  }5 c5 ~/ ~: R+ Z/ m" |( O, X

  }% h, a% e) I$ e5 [6 q) b  < /script>
% N2 e! D3 A3 t! c
& p9 Y. G" v) t% G9 d2 v- E& O  然后,用< body onload="loadpopup()">(注意不是openwin而是loadpop啊!)替换主页面中原有的< BODY>这一句即可。你可以试着刷新一下这个页面或重新进入该页面,窗口再也不会弹出了。真正的Pop-Only-Once!
: `8 S( y/ U4 C1 C' @3 h& U! z
  写到这里弹出窗口的制作和应用技巧基本上算是完成了,俺也累坏了,一口气说了这么多,希望对正在制作网页的朋友有所帮助俺就非常欣慰了。
/ ~+ Q7 w# h8 F" ^9 N6 f8 y- C' q# H  c' o- B0 O
  需要注意的是,JS脚本中的的大小写最好前后保持一致。
' P- |0 E  i! o2 D0 M: y, e9 ~* ^' R
橡胶技术网 ,分享知识,创造价值! 一所没有围墙的大学!!
您需要登录后才可以回帖 登录 | 注册

本版积分规则

QQ|手机版|橡胶技术网. ( 沪ICP备14028905号 )

GMT+8, 2025-1-22 21:01 , Processed in 0.025856 second(s), 24 queries , Gzip On.

Powered by Discuz! X3.5 Licensed

© 2001-2025 Discuz! Team.

快速回复 返回顶部 返回列表