旗下网站:橡胶人才网

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

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

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

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

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

×
  经常上网的朋友可能会到过这样一些网站,一进入首页立刻会弹出一个窗口,或者按一个连接或按钮弹出,通常在这个窗口里会显示一些注意事项、版权信息、警告、欢迎光顾之类的话或者作者想要特别提示的信息。其实制作这样的页面效果非常的容易,只要往该页面的HTML里加入几段Javascript代码即可实现。下面俺就带您剖析它的奥秘。   q8 m1 H! E6 V2 E' ^
' _0 V' a) `# i; W
  1、最基本的弹出窗口代码
& x$ ], a( t" q: \) [: J; w# W. q2 E* E4 W
  其实代码非常简单:
3 {: j7 u  z, F4 ?- j, R4 j8 A4 J& ]; i/ c
  < SCRIPT LANGUAGE="javascript">: }3 B4 w! \! E+ [

$ Z  Y" e% O" o- T1 r& e3 O  < !--
7 P4 m6 a& X' A. q1 H" {! Y
6 e9 A/ n1 ?0 _) X2 U3 z- ]  W  window.open ("page.html")/ R+ A  g' T1 @% J* b) o

# c. r( n. i9 [; `" n' M6 `% e' u  -- 1 R/ G8 [4 @, n* E) A0 }. A
>5 o0 v% y4 q. _5 f/ Q
; t. K3 [# S" p6 o
  < /SCRIPT>
. r4 f* b: H& b3 n- u' Q+ k: o0 X
  因为这是一段Javascript代码,所以它们应该放在< SCRIPT LANGUAGE="javascript">之间。 < !-- 和 -->是对一些版本低的浏览器起作用,在这些老浏览器中不会将标签中的代码作为文本显示出来。要养成这个好习惯啊。
/ U7 W0 D2 d: V  C
7 e) n7 W) W. D! V8 H  window.open ("page.html") 用于控制弹出新的窗口page.html,如果page.html不与主窗口在同一路径下,前面应写明路径,绝对路径(http://)和相对路径(../)均可。 8 w1 Y9 n9 _, D8 Z+ L! I

% V& U9 o9 a! W  用单引号和双引号都可以,只是不要混用。 $ a/ F1 t1 h+ k! W& M5 O
, R9 w6 t$ U2 b& D+ Z4 c
  这一段代码可以加入HTML的任意位置,< head>和< /head>之间可以,< body>间< /body>也可以,越前越早执行,尤其是页面代码长,又想使页面早点弹出就尽量往前放。 也可以,越前越早执行,尤其是页面代码长,又想使页面早点弹出就尽量往前放。
" t/ W' ]5 _# V: {5 ?) _
0 E: k% m8 u! ]$ R  t9 I  2、经过设置后的弹出窗口
% ]2 W( v. M9 }# r$ w+ ^5 E2 [$ u7 m) _4 G! p$ R' o$ p
  下面再说一说弹出窗口的设置。只要再往上面的代码中加一点东西就可以了。我们来定制这个弹出的窗口的外观,尺寸大小,弹出的位置以适应该页面的具体情况。 $ z, m. a. a3 Y6 N- y7 q
9 M! K0 W1 h8 |9 H7 {; t8 c: U
  < SCRIPT LANGUAGE="javascript">( ]! I9 c& e; _  V0 R

* \. `. n  i7 ?; l3 Z0 l- U3 X  < !--; s  V/ l* E4 _; ]

* w+ }* o% w7 y8 H* Q4 I9 A; X  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")
7 ~# _/ g9 J( b9 J' |. \3 u6 g/ p6 h
  //写成一行. _" Q6 }: c) K1 v8 V

0 K3 i1 H: ^! y9 m3 {) ^  -->
9 b& d' A, S* T+ V/ u4 a/ ^8 i  E7 x0 m$ z- j% B
  < /SCRIPT> 8 r+ N8 x9 a5 X7 J0 G: ?* m2 g

- R+ J# L! }; Y$ E4 |" n& o2 o  参数解释:
5 @3 k+ C( l9 S$ U& H& E# |
+ W, l! C. |1 @9 l% P% b  < SCRIPT LANGUAGE="javascript"> js脚本开始;
6 z' W  p3 b$ C' i8 j
( V: L$ [+ G, Y# r, \2 l/ ~8 ~  window.open 弹出新窗口的命令;
  M) w& Y$ q/ ?  i% S, ]! U( c$ \) G2 `. p0 X: l
  "page.html" 弹出窗口的文件名;" a! z2 v1 Q" k- X4 o# b8 W

/ {6 a* d9 @7 K) r  "newwindow" 弹出窗口的名字(不是文件名),非必须,可用空"代替;& {" H4 A( t& T8 X" z: y3 [

* c" \2 t3 N: T- |  height=100 窗口高度;
" ]2 R/ {0 {3 M6 n* ~! B: E$ _% r1 y6 L! Y# C( f
  width=400 窗口宽度;6 N. P4 d4 w& q3 }  D# l
! M) x8 h& x2 Z
  top=0 窗口距离屏幕上方的象素值;4 Z, W9 [9 R/ Q- Q9 R! @7 }
0 w' S8 x& E+ a' H' d4 a7 g
  left=0 窗口距离屏幕左侧的象素值;
% q! D3 ~9 s+ ^( b& k
( B1 e7 C( b  S9 E* D9 |: N& W$ E  toolbar=no 是否显示工具栏,yes为显示;
; y" E1 H& a! M3 Q2 u$ i  D1 |( l/ u% R* u+ F# h
  menubar,scrollbars 表示菜单栏和滚动栏。
) p) R% q4 x3 f( M& _8 |. t+ k
3 x0 t8 \7 _5 w! _  resizable=no 是否允许改变窗口大小,yes为允许;
  h/ M' \8 }4 }, j# S5 L' S; A% M% f2 N. q  Z) F
  location=no 是否显示地址栏,yes为允许;
: v9 F+ a6 r, T, p; |7 O% y& y' K
  status=no 是否显示状态栏内的信息(通常是文件已经打开),yes为允许;
4 R4 O3 c7 F# D+ ]3 O8 }3 l
- K7 O4 \# A  B* R7 M+ K. @  < /SCRIPT> js脚本结束 2 J; ^" S( ^# y9 t7 O( o
/ M; z& Y# D) j' r  u
  3、用函数控制弹出窗口
8 H) L8 C: S/ P3 ?9 R5 T+ w
2 X6 O1 z- H# ~2 O) c& u: u  下面是一个完整的代码:
! `( h" Y9 K2 N  B2 Z
+ h& x7 X1 L) r% y! d7 c  < html>
. k' [+ l1 ?/ w! ^" ?6 N$ ^' I
* m: d- i  d) J/ F* w4 F, h  < head>0 R! j" N  k' `4 t$ E# D) b$ l/ S. A
8 g( b4 q6 V% v3 t! e8 v" G
  < script LANGUAGE="JavaScript">+ _9 D2 W/ s5 ^! {7 n
$ w9 p! e6 [, w
  < !--
! m% S6 H) R/ `1 g' f# z5 d/ B
0 u( i- t4 r0 P  function openwin() {3 X# `/ w3 Q" Q) z4 _+ t  @2 L. V1 L

1 g" L0 N5 w2 U% K( c  window.open ("page.html", "newwindow", "height=100, width=400, toolbar=no, menubar=no, scrollbars=no, resizable=no, location=no, status=no")
9 Y3 F3 {" S5 n; o7 \; ^% ~/ r0 g
6 f, k% @4 U0 w0 m! y4 D. ~* j3 r  //写成一行0 y8 r4 O9 `  ~. ?: l

9 s; B  I5 G- C9 f8 J: \  }
1 Y6 A% F/ q' V0 A* }$ V3 i1 o3 |/ |1 ^5 C$ R( r# `8 K: u1 r
  //-->
! R; Z& z' u( j  d
3 C2 J6 x% [* q7 _; p1 y0 A  < /script>6 ?9 w% W  u" b7 \" G

4 j& X$ Q( f  r4 ?' Q3 G+ r$ \  < /head>
; g0 ^" ?3 O) e# ~' L& ?$ u0 s! U: |; \" v( ?  G% b# k7 L
  < body onload="openwin()">
+ ]0 R! j3 R4 ~3 f
2 b6 i* C  p) D/ g8 U8 S  ...任意的页面内容...
; X; Z5 D8 L0 U8 e% z
6 `8 z% `. w# C1 j6 m  < /body>' p$ h! o- x8 }, c
( _6 F  l5 T7 ?0 M
  < /html>
/ d+ d9 h% Z3 c! l' v" I/ O9 d" _% X' A3 _' Q
  这里定义了一个函数openwin(),函数内容就是打开一个窗口。在调用它之前没有任何用途。
; v; G, l& e* L0 A9 u' K* k' i& t/ r% Z" d5 g/ A7 g
  怎么调用呢?1 ]6 J" {5 n# K$ z" q* ?% N5 w3 L1 b
0 Q; o- J  z2 ]0 c7 L) O
  方法一:< body onload="openwin()"> 浏览器读页面时弹出窗口;
' e/ S6 D, u  [& g+ K
8 ~! Z3 Z0 v. T( v! i  k# F  方法二:< body onunload="openwin()"> 浏览器离开页面时弹出窗口;
/ f6 O3 f0 V& e4 |) o) V. ?; e0 _! S5 m
  方法三:用一个连接调用:< a href="#" onclick="openwin()">打开一个窗口< /a>
& o: i1 ~2 p+ F5 a
! _* ^2 [/ n; g) X! }* ^  注意:使用的"#"是虚连接。
! M# x/ C4 c7 r  s9 h7 z( X0 C7 i! t9 F0 D; b* N
  方法四:用一个按钮调用:< input type="button" onclick="openwin()" value="打开窗口">
- ?# O: S1 \& _% Q3 @- F
' z- t- @3 V: p$ [# N+ g  4、同时弹出2个窗口
" k2 R* f9 L; c- o# Y% g- a0 f/ y% d* {7 F* z/ _
  对源代码稍微改动一下:* K4 a1 o8 t; T( M

) G# P$ N- \5 O5 y' c% L  < script LANGUAGE="JavaScript">
5 J4 `  B7 ?# l- |; k$ {
: C1 B/ K+ `& D; ?# T  < !--
* x* n8 \2 W  f0 I. e% S7 A( c* T1 e* `
  function openwin() {# S: B' D$ l- d
0 H7 A# e. C  V
  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")
0 p) r6 f- ]4 `& A8 [: O7 h8 R, n, ~1 v4 _
  //写成一行: U6 W6 B! @1 g) n3 R

- ~8 N$ m( ^$ A# {- @4 M  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")
7 a4 U" n% }& f4 |3 T1 `7 T
# s1 X: d1 h0 s# p+ I1 _  //写成一行
8 B( b/ K: z1 ?2 [7 {( Q: a$ \# J% u* A/ K8 E7 u
  }* [  _+ H) q9 I3 W0 G, n) O4 D
0 Q; o1 E* W7 j+ o& B; P- L
  //--># T1 k0 y9 }4 B- [% R

+ c) k1 P* z# V7 H/ v2 }  < /script>: M: x: h. L$ @# g  |4 p

# K: F. `" o: @+ @) y, z, l" q; V" _  为避免弹出的2个窗口覆盖,用top和left控制一下弹出的位置不要相互覆盖即可。最后用上面说过的四种方法调用即可。* I: A  N1 m5 W

) M0 o9 `7 ^2 n  c! H  注意:2个窗口的name(newwindows和newwindow2)不要相同,或者干脆全部为空。OK?
6 G3 D/ n) K# G( [; K2 j' ]+ G  K6 Z% p. F
  5、主窗口打开文件1.htm,同时弹出小窗口page.html% m- l4 n( q2 ?/ n' z. M
6 q2 e8 N( Y" T2 X# ~
  如下代码加入主窗口< head>区:
8 o; t% \: e- y, a6 I+ x, f3 ^6 s0 ]  N3 i1 z
  < script language="javascript">
; e3 h; R$ ^2 R* B& u
' }2 a& c2 ?5 O1 |  A' L6 L" O  L4 \  < !--4 K5 F5 N' |0 S% v3 q" B. }! M
  i6 O8 Q6 C0 E+ e
  function openwin() {0 X% z; G/ R. e& k

9 v7 |3 M9 Q. R; p7 A  window.open("page.html","","width=200,height=200")* L; m# A7 `0 M8 l. t4 b' B
, @4 ]/ M2 a" n) N( o$ l1 l
  }
0 `1 j% E4 r# y4 i6 B% J2 x
  l3 D0 A: ^" g( J: i( t$ F/ V  //-->
; x' q  [) W3 _& O" a, n. T! Z" N( u0 E' U( T4 @
  < /script>6 |0 W8 `2 z( L3 E& Y

9 R# x% o6 C* D3 X7 [9 i  加入< body>区:( }8 d% B6 k  J/ U

7 q% g0 V/ b1 b+ f# |9 T  < a href="1.htm" onclick="openwin()">open< /a>即可
& X1 H8 m7 n5 r4 q+ Q5 }
: R3 k' u0 E: \" y2 A' s  6、弹出的窗口之定时关闭控制
# J/ X5 `  t# H/ q! L/ i1 D6 Y# k* p/ n
  下面我们再对弹出的窗口进行一些控制,效果就更好了。如果我们再将一小段代码加入弹出的页面(注意是加入到page.html的HTML中,可不是主页面中,否则...),让它10秒后自动关闭是不是更酷了? 3 o/ v! M/ \* E: s

" r* o8 @6 V0 \5 W( p$ w$ i) D  首先,将如下代码加入page.html文件的< head>区:( |2 F7 i* k: U: e) k; f+ J: c
% b0 O6 d- q5 ]
  < script language="JavaScript">; {0 C5 }7 L* ~$ t7 N& W
% f! Y; t9 B* [& c
  function closeit() {
/ K( A% m' t% W, h- H+ W/ m( ~0 W3 o
  setTimeout("self.close()",10000) //毫秒
1 b( C8 a0 P9 e6 R+ x6 |8 k- E; f6 c& K" r/ i. o& Y
  }
$ V! x; M2 b: x& w  N5 H. K7 f3 s! {4 R% w, ]1 t' z& Q( K; b& y
  < /script>- E# `6 L5 v, T
( u4 ^& ^* t, r9 A, b7 K. ^' @
  然后,再用< body onload="closeit()"> 这一句话代替page.html中原有的< BODY>这一句就可以了。(这一句话千万不要忘记写啊!这一句的作用是调用关闭窗口的代码,10秒钟后就自行关闭该窗口。)
4 {* U( e  ]! B
3 _0 C& @( g" O% `  7、在弹出窗口中加上一个关闭按钮
( @! L& {) ~& |4 ^' F! x2 l! h' d1 Q7 B/ g- F1 |
  < FORM>, w. c! {. [3 t

, G8 d' c4 M! K& _3 K$ D  w7 j2 l  < INPUT TYPE="BUTTON" VALUE="关闭" onClick="window.close()">4 ]: f' A4 j& L4 r. O& H, @" H

/ z/ P) J, q- i, B  < /FORM>
( Y& g- H# Z5 Q
. p& r  B5 B, F3 s" ~  呵呵,现在更加完美了!
7 s& C4 r1 `& e+ X& b8 J* `0 w* N& w. h  D, z1 M- D
  8、内包含的弹出窗口---一个页面两个窗口
- s# k  j  V  _8 a. x- N9 ]. l) Y1 W7 p# H
  上面的例子都包含两个窗口,一个是主窗口,另一个是弹出的小窗口。通过下面的例子,你可以在一个页面内完成上面的效果。
$ Y! d' L  L7 f7 J( e
0 z8 r( S0 d) p& o  h1 M  < html>
/ p* B$ E" @/ C6 s
, k  g. s" `. Q0 X  < head>" Y0 U# h$ A0 G; u2 d# i
& n2 s; U" c7 }+ l9 I% R
  < SCRIPT LANGUAGE="JavaScript">
( r# s; J& g$ R
1 n1 m2 ^- e# j  function openwin()% [% p/ ]# h3 c, J3 ^

. j5 P4 H' u1 @- t0 s; L  {
. }6 ~/ b0 T) i- G+ t* |" u7 n0 G( I( n2 H# |' ^$ {
  OpenWindow=window.open("", "newwin", "height=250, width=250,toolbar=no,scrollbars="+scroll+",menubar=no");% a9 Y" a  Y1 F9 w& q% \
/ \4 S( ]9 X2 B/ t* Y
  //写成一行
- }! u/ y! `3 U& _' d$ N7 ?  b. n7 V& M; b: t5 f
  OpenWindow.document.write("< TITLE>例子< /TITLE>")7 @+ h. V) H/ \; }

9 @" `$ W& B! O# m9 Y/ T  OpenWindow.document.write("< BODY BGCOLOR=#ffffff>")# }* d1 p9 q, Y6 a* R& q9 [& J
  p# o; H( k& P& [3 f: [- y, M
  OpenWindow.document.write("< h1>Hello!< /h1>")9 ]# o1 t' q, I4 v0 M# i) d( U0 O

. ~4 ~, ~$ U; r6 I  OpenWindow.document.write("New window opened!")
' `( T* y/ [6 Q- o8 c& C! Q: v- b7 m! T& Q# [
  OpenWindow.document.write("< /BODY>")& ~9 U, A" y' p
6 C; }$ O6 j! ^* d2 P4 Z$ V
  OpenWindow.document.write("< /HTML>")5 _0 o9 [' i8 Y+ V; H6 ?

! w% a+ S, p# g: \7 p  OpenWindow.document.close()
  s( |# c( j. z  J# e; J! ?: K" N' K! }# E' R1 ^/ v; n
  }
7 d& N; `. K3 u6 |1 i: m$ B4 j, i- z5 g" |. l% X
  < /SCRIPT>
6 o! D8 G5 c; h# A* |1 ]+ R0 M4 i" h' G% a0 S
  < /head>
2 W+ W& H0 A- t( p0 f8 z+ |" i: r* w8 \; e
  < body>
  Z& L3 x$ [3 o( y" P4 e" b. }) p7 }. j" }% J5 D  b' ]
  < a href="#" onclick="openwin()">打开一个窗口< /a>
- V/ E2 r/ g% X" y+ ]8 A
4 o7 Q' s- _  h/ b; u  < input type="button" onclick="openwin()" value="打开窗口">5 y! B& I6 [( R* j

: n' |; {; ^0 x; B) J  < /body>9 Z" C5 E2 ?' D" C. U

1 R. p. M& }/ W  c  < /html>
/ u2 b8 O( ]: t0 m, h% I
3 n6 N/ K1 \) s7 T* o- [  看看OpenWindow.document.write()里面的代码不就是标准的HTML吗?只要按照格式写更多的行即可。千万注意多一个标签或少一个标签就会出现错误。记得用OpenWindow.document.close()结束啊。 , t4 _: e; ?# l7 q& M' g
2 q: H. h6 y2 c) D7 H
  9、终极应用--弹出的窗口之Cookie控制 4 a8 z: \, {& v2 ?: k

& b2 S) Y) `( j6 [  e3 ?6 ~  回想一下,上面的弹出窗口虽然酷,但是有一点小毛病(沉浸在喜悦之中,一定没有发现吧?)比如你将上面的脚本放在一个需要频繁经过的页面里(例如首页),那么每次刷新这个页面,窗口都会弹出一次,是不是非常烦人?:-(
3 D7 k/ V2 r7 n6 W* T. G6 @, p  r0 V9 E. X! j
  有解决的办法吗?当然有!我们使用cookie来控制一下就可以了。首先,将如下代码加入主页面HTML的< HEAD>区:
, f5 d* O8 ~% q2 c; e4 H
  }* u; V3 U! \( a8 U+ r  < script>
4 q1 i# ^  {2 P/ R2 ]! u# X+ P8 a% C& Q, L7 {  u% r
  function openwin(){
3 o8 [/ Z5 ^8 S& @; R) }% K2 S' I% k, N/ Z
  window.open("page.html","","width=200,height=200")
. g$ V# o8 \' Z/ u! L" `
1 p5 n# n0 t4 q  }( Y9 |# e5 {" ]' D# b6 r* g
8 {- ?+ k% S) o9 Q: y. w
  function get_cookie(Name) {
6 h# ?2 ^3 r4 @4 X* o  {$ N' a$ \! q! P" u& t) ]- r8 h
  var search = Name + "=" var returnvalue = "";3 A& {8 y# i5 Z: A( i8 U! Y

3 o+ p. b2 A6 X. S/ P  if (document.cookie.length > 0) {4 ]& R9 U! l* K2 ]
7 p. }5 O' l+ h8 f# x) Y& X& S( |$ F
  offset = document.cookie.indexOf(search)7 T% X9 v+ D) F9 k4 {! X! g

1 k, r5 H0 ^: _. g* i  if (offset != -1) {
/ ?' O0 t. |. z6 @
4 W2 ~4 a1 i# H% M3 f  offset += search.length
1 ]3 ?% F+ o( s# |1 n/ l# D) s& ~$ g5 I& M7 ?
  end = document.cookie.indexOf(";", offset);
7 J+ h/ ?+ a( f; V2 E7 S, e" y2 @& S( t( I& Y
  if (end == -1)( Q. t& w2 V3 C+ z8 {' r) K

; M6 G: \$ C) F% _  end = document.cookie.length;
) N* j: ^  I6 s3 ^* e: u1 B/ p0 b5 n6 t, G0 N* s  R
  returnvalue=unescape(document.cookie.substring(offset, end))
1 u9 w. K2 w# d
: E: N0 }7 j* J! Z  }
3 l. b/ Z+ k+ ^6 b; W0 a% z- G/ S) G! X6 Y) U
  }  ]9 J+ ]* k# w# _( T; t
7 S) t" Y0 c! i4 f1 J
  return returnvalue;
- l8 R; O# Z0 A& J# O" k8 e; U2 ^
( y6 s- f9 V* b  }
  n/ c# _9 A) A2 U! Y( @  B3 n( C
& {4 @  e  q5 B8 m  function loadpopup(){; R' T9 g  `6 f$ r& L: k& ]+ [7 K6 }
9 b0 [/ }( d5 b  _3 N1 D
  if (get_cookie("popped")=="){2 t( a5 e6 e5 \3 Y2 r+ r1 a  ?/ @

2 p# H1 K9 \' T5 p  openwin()3 {. N9 {& J4 E+ G. a  J' O

/ S( z" n; \' V: D; j3 b  document.cookie="popped=yes"
# t  _1 P8 J$ j2 U! @" f. h+ X( f2 K! o; {3 P
  }
' C0 j* i' b2 T4 `2 N( @# ^4 X+ F* I: w
  }
& }! _! ^, Z! V3 F2 O
  L; v( ]! [6 q1 ], g, p  < /script>
6 a' g) o' i: f- b! K& G9 I! p6 A8 ?) Z1 a+ Q
  然后,用< body onload="loadpopup()">(注意不是openwin而是loadpop啊!)替换主页面中原有的< BODY>这一句即可。你可以试着刷新一下这个页面或重新进入该页面,窗口再也不会弹出了。真正的Pop-Only-Once!( B5 W$ M# ?" D- [

  j6 ?: o( e% {; p5 c5 W* Z  写到这里弹出窗口的制作和应用技巧基本上算是完成了,俺也累坏了,一口气说了这么多,希望对正在制作网页的朋友有所帮助俺就非常欣慰了。 $ J# ]$ u2 u: r2 `
1 V  P8 T8 y4 t9 E6 V
  需要注意的是,JS脚本中的的大小写最好前后保持一致。6 \$ q9 ?% }5 e" N8 q

( H8 \! a# d; X, b, D5 V
橡胶技术网 ,分享知识,创造价值! 一所没有围墙的大学!!
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-12-23 00:45 , Processed in 0.024996 second(s), 24 queries , Gzip On.

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

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