1
var ProgressIndicator = {
2
isShow : false,
3
height : 100,
4
width : 300,
5
target : self,
6
spinner : "../images/spinner.gif",
7
show : function(width,height,target)
8
{
9
if(this.isShow==false)
10
{
11
if(arguments.length >= 2)
12
{
13
this.width = width;
14
this.height = height;
15
if(arguments.length>2)
16
this.target = target;
17
}
18
var size = this.getMaskSize();
19
this.target.document.body.insertAdjacentHTML("beforeEnd","<div id=\"maskskin\" style=\"position:absolute;left:0px;top:0px;background-color:#333333;opacity: .4;filter: alpha(opacity=40);z-index:1000;width:"+size.width+"px;height:"+size.height+"px;\"></div>");
20
var position = this.getCenterPosition();
21
this.target.document.body.insertAdjacentHTML("beforeEnd","<IFRAME name=\"masklayer\" style=\"border:1px solid buttontext;position:absolute;z-index:1001;left:"+position.left+"px;top:"+position.top+"px;\" frameborder=0 width=\""+this.width+"\" height=\""+this.height+"\" src=\"about:blank\"/>");
22
var frameDoc = this.target.document.frames["masklayer"].document;
23
frameDoc.open();
24
frameDoc.write("<table width=\"100%\" height=\"100%\"><tr><td><img src=\""+this.spinner+"\"></td><td style=\"color:black;font-size:10pt;\"><b>Waiting
</b></td></tr><tr><td></td><td style=\"color:black;font-size:10pt;\">Be patient,processing
</td></tr></table>");
25
frameDoc.close();
26
this.isShow = true;
27
this.addEvent(this.target, "resize", ProgressIndicator.centerProgressBar);
28
this.addEvent(this.target, "scroll", ProgressIndicator.centerProgressBar);
29
}
30
//window.onscroll = this.centerProgressBar;
31
},
32
hide : function()
33
{
34
var maskFrame = this.target.document.getElementById("masklayer");
35
maskFrame.parentNode.removeChild(maskFrame);
36
var maskSkin = this.target.document.getElementById("maskskin");
37
maskSkin.parentNode.removeChild(maskSkin);
38
this.isShow = false;
39
this.removeEvent(this.target, "resize", ProgressIndicator.centerProgressBar);
40
this.removeEvent(this.target, "scroll", ProgressIndicator.centerProgressBar);
41
},
42
updateMessage : function(msg)
43
{
44
if(this.isShow)
45
{
46
var table = this.target.document.frames["masklayer"].document.getElementsByTagName("TABLE")[0];
47
table.rows[1].cells[1].innerHTML = msg;
48
}
49
},
50
addEvent : function(obj, evType, fn){
51
if (obj.addEventListener){
52
obj.addEventListener(evType, fn, false);
53
return true;
54
} else if (obj.attachEvent){
55
var r = obj.attachEvent("on"+evType, fn);
56
return r;
57
} else {
58
return false;
59
}
60
},
61
removeEvent : function(obj, evType, fn, useCapture){
62
if (obj.removeEventListener){
63
obj.removeEventListener(evType, fn, useCapture);
64
return true;
65
} else if (obj.detachEvent){
66
var r = obj.detachEvent("on"+evType, fn);
67
return r;
68
} else {
69
alert("Handler could not be removed");
70
}
71
},
72
getViewportHeight : function() {
73
if (this.target.innerHeight!=this.target.undefined) return this.target.innerHeight;
74
if (this.target.document.compatMode=='CSS1Compat') return this.target.document.documentElement.clientHeight;
75
if (this.target.document.body) return this.target.document.body.clientHeight;
76
77
return this.target.undefined;
78
},
79
getViewportWidth : function(){
80
var offset = 17;
81
var width = null;
82
if (this.target.innerWidth!=this.target.undefined) return this.target.innerWidth;
83
if (this.target.document.compatMode=='CSS1Compat') return this.target.document.documentElement.clientWidth;
84
if (this.target.document.body) return this.target.document.body.clientWidth;
85
},
86
getScrollTop : function(){
87
if (self.pageYOffset) // all except Explorer
88
{
89
return self.pageYOffset;
90
}
91
else if (this.target.document.documentElement && this.target.document.documentElement.scrollTop)
92
// Explorer 6 Strict
93
{
94
return this.target.document.documentElement.scrollTop;
95
}
96
else if (this.target.document.body) // all other Explorers
97
{
98
return this.target.document.body.scrollTop;
99
}
100
},
101
getScrollLeft : function(){
102
if (self.pageXOffset) // all except Explorer
103
{
104
return self.pageXOffset;
105
}
106
else if (this.target.document.documentElement && this.target.document.documentElement.scrollLeft)
107
// Explorer 6 Strict
108
{
109
return this.target.document.documentElement.scrollLeft;
110
}
111
else if (this.target.document.body) // all other Explorers
112
{
113
return this.target.document.body.scrollLeft;
114
}
115
},
116
getMaskSize : function()
117
{
118
var theBody = this.target.document.getElementsByTagName("BODY")[0];
119
120
var fullHeight = this.getViewportHeight();
121
var fullWidth = this.getViewportWidth();
122
123
// Determine what's bigger, scrollHeight or fullHeight / width
124
if (fullHeight > theBody.scrollHeight) {
125
popHeight = fullHeight;
126
} else {
127
popHeight = theBody.scrollHeight;
128
}
129
130
if (fullWidth > theBody.scrollWidth) {
131
popWidth = fullWidth;
132
} else {
133
popWidth = theBody.scrollWidth;
134
}
135
136
return {width:popWidth,height:popHeight+this.height};
137
},
138
getCenterPosition : function()
139
{
140
//var theBody = document.documentElement;
141
var theBody = this.target.document.getElementsByTagName("BODY")[0];
142
//theBody.style.overflow = "hidden";
143
var scTop = parseInt(this.getScrollTop(),10);
144
var scLeft = parseInt(theBody.scrollLeft,10);
145
146
var fullHeight = this.getViewportHeight();
147
var fullWidth = this.getViewportWidth();
148
149
var top = scTop + ((fullHeight - this.height) / 2);
150
var left = scLeft + ((fullWidth - this.width) / 2);
151
152
return {top:top,left:left};
153
},
154
centerProgressBar : function()
155
{
156
if(ProgressIndicator.isShow)
157
{
158
var position = ProgressIndicator.getCenterPosition();
159
var maskdiv = ProgressIndicator.target.document.getElementsByName("masklayer")[0];
160
maskdiv.style.top = position.top + "px";
161
maskdiv.style.left = position.left + "px";
162
}
163
}
164
};

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24



25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

64

65

66

67

68

69

70

71

72

73

74

75

76

77

78

79

80

81

82

83

84

85

86

87

88

89

90

91

92

93

94

95

96

97

98

99

100

101

102

103

104

105

106

107

108

109

110

111

112

113

114

115

116

117

118

119

120

121

122

123

124

125

126

127

128

129

130

131

132

133

134

135

136

137

138

139

140

141

142

143

144

145

146

147

148

149

150

151

152

153

154

155

156

157

158

159

160

161

162

163

164

1
<html>
2
<head>
3
<title>ProgressIndicator Demo</title>
4
<script language="javascript" type="text/javascript" src="ProgressIndicator.js"></script>
5
<script language="javascript" type="text/javascript">
6
<!--
7
8
ProgressIndicator.spinner = "spinner.gif";
9
10
//-->
11
</script>
12
</head>
13
<body>
14
<h2>ProgressIndicator Demo</h2>
15
<hr/>
16
<input type="button" value="Show ProgressIndicator
" onclick="ProgressIndicator.show()"><br/><br/>
17
<input type="button" value="Show ProgressIndicator
[400,150]" onclick="ProgressIndicator.show(400,150,top)">
18
</body>
19
</html>

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16


17


18

19

仅在IE6中测试过
附件下载