1
+ <!DOCTYPE html>
2
+ < html >
3
+ < head >
4
+ < title > Effects Demo</ title >
5
+
6
+ < meta http-equiv ="Content-Type " content ="text/html; charset=utf-8 " />
7
+ < meta name ="viewport " content ="width=device-width, initial-scale=1.0, user-scalable=0, minimum-scale=1.0, maximum-scale=1.0 " />
8
+ < meta name ="apple-mobile-web-app-capable " content ="yes " />
9
+ < meta name ="apple-mobile-web-app-status-bar-style " content ="black " />
10
+
11
+ < link href ="../style.css " rel ="stylesheet " type ="text/css " />
12
+
13
+
14
+
15
+ < script src ="../../src/utils/Utils.js "> </ script >
16
+ < script src ="../../src/utils/Effects.js "> </ script >
17
+ < script src ="../../themes/default.js "> </ script >
18
+
19
+
20
+ < style >
21
+
22
+ .demo {
23
+ display : flex;
24
+ flex-wrap : nowrap;
25
+ }
26
+
27
+
28
+ .menu {
29
+ border : 1px solid # dcdcdc ;
30
+ width : 145px ;
31
+ padding : 5px ;
32
+ }
33
+
34
+ .menu : focus {
35
+ outline : 0 ;
36
+ }
37
+
38
+ .menu ul {
39
+ margin : 5px 0 0 0 ;
40
+ padding : 0 0 0 0 ;
41
+ list-style-type : none;
42
+ }
43
+
44
+ .menu li {
45
+ margin : 0 0 0 0 ;
46
+ padding : 0 12px 2px 0 ;
47
+ white-space : nowrap;
48
+ color : # 777 ;
49
+ cursor : pointer;
50
+ }
51
+
52
+ .menu li : hover {
53
+ background-color : aliceblue;
54
+ }
55
+
56
+ .menu li .active {
57
+ background-color : # c8e5ff ;
58
+ }
59
+
60
+
61
+
62
+ .preview {
63
+ width : 100% ;
64
+ border : 1px solid # dcdcdc ;
65
+ padding : 5px ;
66
+ position : relative;
67
+ }
68
+
69
+ .preview .circle {
70
+ width : 20px ;
71
+ height : 20px ;
72
+ border-radius : 50% ;
73
+ background-color : # ff8f8f ;
74
+ }
75
+
76
+ .middle {
77
+ position : relative;
78
+ top : 50% ;
79
+ -webkit-transform : translateY (-50% );
80
+ -ms-transform : translateY (-50% );
81
+ transform : translateY (-50% );
82
+ }
83
+
84
+ .center {
85
+ margin : 0 auto;
86
+ }
87
+
88
+
89
+ </ style >
90
+
91
+ </ head >
92
+ < body >
93
+ < div class ="demo-container ">
94
+
95
+
96
+ < h1 > Effects Demo</ h1 >
97
+ < p > A sampling of various JavaXT effects found in the javaxt.dhtml.Effects class.
98
+ Transitions effects are defined for individual elements using the setTransition()
99
+ method.
100
+ </ p >
101
+
102
+ < div class ="demo ">
103
+ < div class ="menu ">
104
+ Demo
105
+ < ul >
106
+ < li > Slide In</ li >
107
+ < li > Fade In</ li >
108
+ < li > Drop</ li >
109
+ < li > Grow</ li >
110
+ < li > Expand</ li >
111
+ < li > Expand Left</ li >
112
+ < li > Expand Right</ li >
113
+ </ ul >
114
+ </ div >
115
+ < div class ="menu ">
116
+ Effect
117
+ < ul > </ ul >
118
+ </ div >
119
+ < div class ="preview ">
120
+ Demo
121
+ </ div >
122
+ </ div >
123
+ </ div >
124
+
125
+
126
+
127
+ < script >
128
+ window . onload = function ( ) {
129
+ var createElement = javaxt . dhtml . utils . createElement ;
130
+
131
+
132
+ //Instantiate the Effects class
133
+ var fx = new javaxt . dhtml . Effects ( ) ;
134
+ var demo , effect , preview ;
135
+
136
+
137
+ //Get menus
138
+ var demoMenu , effectMenu ;
139
+ var menus = document . getElementsByClassName ( "menu" ) ;
140
+ for ( var i = 0 ; i < menus . length ; i ++ ) {
141
+
142
+ var ul = menus [ i ] . getElementsByTagName ( "ul" ) [ 0 ] ;
143
+ if ( i == 0 ) demoMenu = ul ;
144
+ else effectMenu = ul ;
145
+
146
+ menus [ i ] . tabIndex = - 1 ; //allows the div to have focus
147
+ menus [ i ] . addEventListener ( "keyup" , function ( e ) {
148
+
149
+ if ( e . keyCode === 38 || e . keyCode === 40 ) {
150
+
151
+
152
+ var rows = [ ] ;
153
+ var lastSelectedRow = - 1 ;
154
+ var ul = this . getElementsByTagName ( "ul" ) [ 0 ] ;
155
+ for ( var i = 0 ; i < ul . childNodes . length ; i ++ ) {
156
+ var li = ul . childNodes [ i ] ;
157
+ if ( li . nodeType == 1 ) {
158
+ rows . push ( li ) ;
159
+ if ( li . classList . has ( "active" ) ) {
160
+ lastSelectedRow = rows . length - 1 ;
161
+ }
162
+ }
163
+ }
164
+
165
+ if ( lastSelectedRow > - 1 ) {
166
+ var row ;
167
+ if ( e . keyCode === 40 ) { //down arrow
168
+ row = rows [ lastSelectedRow + 1 ] ;
169
+ }
170
+ else { //up arrow
171
+ row = rows [ lastSelectedRow - 1 ] ;
172
+ }
173
+ if ( row ) row . click ( ) ;
174
+ }
175
+ }
176
+ } ) ;
177
+
178
+
179
+ }
180
+
181
+
182
+ //Add event listeners to the "Demo" menu
183
+ for ( var i = 0 ; i < demoMenu . childNodes . length ; i ++ ) {
184
+ var li = demoMenu . childNodes [ i ] ;
185
+ if ( li . nodeType != 1 ) continue ;
186
+
187
+
188
+ li . classList . has = function ( className ) {
189
+ for ( var i = 0 ; i < this . length ; i ++ ) {
190
+ if ( this [ i ] === className ) return true ;
191
+ }
192
+ return false ;
193
+ } ;
194
+
195
+
196
+ li . onclick = function ( ) {
197
+ if ( this . classList . has ( "active" ) ) return ;
198
+
199
+ for ( var i = 0 ; i < demoMenu . childNodes . length ; i ++ ) {
200
+ if ( demoMenu . childNodes [ i ] . nodeType != 1 ) continue ;
201
+ demoMenu . childNodes [ i ] . classList . remove ( "active" ) ;
202
+ }
203
+
204
+ this . classList . add ( "active" ) ;
205
+ demo = this . innerText ;
206
+ runDemo ( ) ;
207
+ } ;
208
+ }
209
+
210
+
211
+ //Populate the "Effects" menu and add event listeners
212
+ Object . keys ( javaxt . dhtml . Transitions ) . forEach ( ( key ) => {
213
+ var li = createElement ( "li" , effectMenu , "a" ) ;
214
+ li . innerText = key ;
215
+ li . classList . has = function ( className ) {
216
+ for ( var i = 0 ; i < this . length ; i ++ ) {
217
+ if ( this [ i ] === className ) return true ;
218
+ }
219
+ return false ;
220
+ } ;
221
+
222
+ li . onclick = function ( ) {
223
+ if ( ! demo || this . classList . has ( "active" ) ) return ;
224
+
225
+ for ( var i = 0 ; i < effectMenu . childNodes . length ; i ++ ) {
226
+ if ( effectMenu . childNodes [ i ] . nodeType != 1 ) continue ;
227
+ effectMenu . childNodes [ i ] . classList . remove ( "active" ) ;
228
+ }
229
+
230
+ this . classList . add ( "active" ) ;
231
+ effect = this . innerText ;
232
+ runDemo ( ) ;
233
+ } ;
234
+ } ) ;
235
+
236
+
237
+
238
+
239
+
240
+ //Create function to run the demos
241
+ var runDemo = function ( ) {
242
+ if ( ! demo || ! effect ) return ;
243
+ if ( ! preview ) preview = document . getElementsByClassName ( "preview" ) [ 0 ] ;
244
+ preview . innerHTML = "" ;
245
+
246
+ var div = createElement ( "div" , preview , "circle middle center" ) ;
247
+ div . style . opacity = 0 ;
248
+
249
+
250
+ if ( demo === "Slide In" ) {
251
+ div . style . position = "absolute" ;
252
+ div . className = "circle middle" ;
253
+ div . style . width = "40px" ;
254
+ div . style . height = "40px" ;
255
+ div . style . left = "90%" ;
256
+ div . style . opacity = 1 ;
257
+ setTransition ( div , ( ) => {
258
+ div . style . transitionProperty = "left" ;
259
+ div . style . left = "20px" ;
260
+ } ) ;
261
+ }
262
+ else if ( demo === "Fade In" ) {
263
+ div . style . width = "200px" ;
264
+ div . style . height = "200px" ;
265
+ setTransition ( div , ( ) => {
266
+ div . style . transitionProperty = "opacity" ;
267
+ div . style . opacity = 1 ;
268
+ } ) ;
269
+ }
270
+ else if ( demo === "Drop" ) {
271
+ div . style . position = "absolute" ;
272
+ div . className = "circle" ;
273
+ div . style . top = 0 ;
274
+ div . style . left = "50%" ;
275
+ div . style . width = "40px" ;
276
+ div . style . height = "40px" ;
277
+ div . style . opacity = 1 ;
278
+ setTransition ( div , ( ) => {
279
+ div . style . transitionProperty = "top" ;
280
+ div . style . top = "90%" ;
281
+ } ) ;
282
+ }
283
+ else if ( demo === "Grow" ) {
284
+ div . style . borderRadius = "50%" ;
285
+ div . style . opacity = 1 ;
286
+ setTransition ( div , ( ) => {
287
+ div . style . transitionProperty = "width, height" ;
288
+ div . style . width = "100px" ;
289
+ div . style . height = "100px" ;
290
+ } ) ;
291
+ }
292
+ else if ( demo === "Expand" ) {
293
+ div . style . width = "80px" ;
294
+ div . style . height = "40px" ;
295
+ div . style . borderRadius = "20px" ;
296
+ div . style . opacity = 1 ;
297
+ setTransition ( div , ( ) => {
298
+ div . style . transitionProperty = "width" ;
299
+ div . style . width = "200px" ;
300
+ } ) ;
301
+ }
302
+ else if ( demo === "Expand Left" ) {
303
+ div . style . height = "40px" ;
304
+ div . style . borderRadius = "20px" ;
305
+ div . style . position = "absolute" ;
306
+ div . style . right = "50%" ;
307
+ div . style . opacity = 1 ;
308
+ setTransition ( div , ( ) => {
309
+ div . style . transitionProperty = "padding" ;
310
+ div . style . paddingLeft = "400px" ;
311
+ } ) ;
312
+ }
313
+ else if ( demo === "Expand Right" ) {
314
+ div . style . height = "40px" ;
315
+ div . style . borderRadius = "20px" ;
316
+ div . style . position = "absolute" ;
317
+ div . style . left = "50%" ;
318
+ div . style . opacity = 1 ;
319
+ setTransition ( div , ( ) => {
320
+ div . style . transitionProperty = "padding" ;
321
+ div . style . paddingRight = "400px" ;
322
+ } ) ;
323
+ }
324
+ } ;
325
+
326
+
327
+ var timer ;
328
+ var duration = 1000 ;
329
+ var setTransition = function ( div , callback ) {
330
+ if ( timer ) clearTimeout ( timer ) ;
331
+ timer = setTimeout ( ( ) => {
332
+ fx . setTransition ( div , effect , duration ) ;
333
+ callback ( ) ;
334
+ } , 200 ) ;
335
+ } ;
336
+
337
+
338
+ } ;
339
+ </ script >
340
+
341
+
342
+ </ body >
343
+ </ html >
0 commit comments