HTML5 - 用CSS3动画制作场景切换效果(移动,旋转,淡入淡出等)

  1 <!DOCTYPE html>
  2 <html>
  3 <head>
  4   <meta charset="utf-8">
  5   <title>HTML5-页面切换动画</title>
  6   <link href="animations.css" rel="stylesheet">
  7   <script src="modernizr.custom.js"></script>
  8   <script src="jquery-1.8.0.min.js"></script>
  9   <style>
 10     #viewsWrapper {
 11         top:0px;
 12         left:0px;
 13         width:300px;
 14         height:200px;
 15         position:relative;
 16         overflow: hidden;
 17     }
 18 
 19     #view1 {
 20         background:#dddd00;
 21     }
 22 
 23     #view2 {
 24         background:#ff00ff;
 25     }
 26 
 27     #view3 {
 28         background:#cc00ff;
 29     }
 30 
 31     #view4 {
 32         background:#00cccc;
 33     }
 34 
 35     .pt-page {
 36         width: 100%;
 37         height: 100%;
 38         position: absolute;
 39         top: 0;
 40         left: 0;
 41         visibility: hidden;
 42         overflow: hidden;
 43         -webkit-backface-visibility: hidden;
 44         -moz-backface-visibility: hidden;
 45         backface-visibility: hidden;
 46         -webkit-transform: translate3d(0, 0, 0);
 47         -moz-transform: translate3d(0, 0, 0);
 48         transform: translate3d(0, 0, 0);
 49         -webkit-transform-style: preserve-3d;
 50         -moz-transform-style: preserve-3d;
 51         transform-style: preserve-3d;
 52     }
 53     .pt-page-current,
 54     .no-js .pt-page {
 55         visibility: visible;
 56         z-index: 1;
 57     }
 58   </style>
 59   <script>
 60     //当前页面移动完毕
 61     var endCurrPage = false;
 62     //后续页面移动完毕
 63     var endNextPage = false;
 64     //入场动画和出场动画
 65     var outClass = ‘‘;
 66     var inClass = ‘‘;
 67 
 68     var animEndEventNames = {
 69             WebkitAnimation : webkitAnimationEnd,
 70             OAnimation : oAnimationEnd,
 71             msAnimation : MSAnimationEnd,
 72             animation : animationend
 73         },
 74         // animation end event name
 75         animEndEventName = animEndEventNames[ Modernizr.prefixed( animation ) ]
 76 
 77     $(function() {
 78         //保存各个View的默认class
 79         $(".pt-page").each( function() {
 80             var $page = $( this );
 81             $page.data( originalClassList, $page.attr( class ) );
 82         } );
 83         //设置默认页面
 84         $(".pt-page").eq(0).addClass( pt-page-current );
 85 
 86         //添加动画样式单选框
 87         var str = "";
 88         for(var i=1;i<=67;i++){
 89             str += <input type="radio" name="myAnimation" value="+i+" />效果+i;
 90             if(i%7==0){
 91                 str += "<br/>";
 92             }
 93         }
 94         $("#radiosDiv").html(str);
 95     });
 96 
 97     //View切换
 98     function changeView(newView){
 99         //设置动画效果   
100         var animationType = $(input:radio[name="myAnimation"]:checked:eq(0)).val();
101         getAnimationClass(parseInt(animationType));
102 
103         $currPage = $(".pt-page-current").eq(0);
104         $nextPage = $(newView);
105 
106         //清除原来添加的动画,层级等样式
107         //(正常动画结束时会自动清除,这样做防止用户在动画结束前就点击切换其他的)
108         $(".pt-page").each( function() {
109             $(this).attr( class, $(this).data( originalClassList ) );
110         });
111         $currPage.addClass("pt-page-current");
112         $nextPage.addClass("pt-page-current");
113 
114 
115         //如果就是当页则不切换
116         if($currPage.attr("id") == $nextPage.attr("id")){
117             return;
118         }
119 
120         //新页面入场
121         $currPage.addClass(outClass).on( animEndEventName, function() {
122             $currPage.off( animEndEventName );
123             endCurrPage = true;
124             if( endNextPage ) {
125                 onEndAnimation( $currPage, $nextPage );
126             }
127         } );
128 
129         //旧页面出场
130         $nextPage.addClass(inClass).on( animEndEventName, function() {
131             $nextPage.off( animEndEventName );
132             endNextPage = true;
133             if( endCurrPage ) {
134                 onEndAnimation( $currPage, $nextPage );
135             }
136         } );
137     }
138 
139     //所有动画都结束后
140     function onEndAnimation( $outpage, $inpage ) {
141         endCurrPage = false;
142         endNextPage = false;
143         //resetPage( $outpage, $inpage );
144         //isAnimating = false;
145         $outpage.attr( class, $outpage.data( originalClassList ) );
146         $inpage.attr( class, $inpage.data( originalClassList ) +  pt-page-current );
147     }  
148 
149     function getAnimationClass(animationType) {
150         switch(animationType) {
151             case 1:    
152                 outClass = pt-page-moveToLeft;
153                 inClass = pt-page-moveFromRight;
154                 break;
155             case 2:
156                 outClass = pt-page-moveToRight;
157                 inClass = pt-page-moveFromLeft;
158                 break;
159             case 3:
160                 outClass = pt-page-moveToTop;
161                 inClass = pt-page-moveFromBottom;
162                 break;
163             case 4:
164                 outClass = pt-page-moveToBottom;
165                 inClass = pt-page-moveFromTop;
166                 break;
167             case 5:
168                 outClass = pt-page-fade;
169                 inClass = pt-page-moveFromRight pt-page-ontop;
170                 break;
171             case 6:
172                 outClass = pt-page-fade;
173                 inClass = pt-page-moveFromLeft pt-page-ontop;
174                 break;
175             case 7:
176                 outClass = pt-page-fade;
177                 inClass = pt-page-moveFromBottom pt-page-ontop;
178                 break;
179             case 8:
180                 outClass = pt-page-fade;
181                 inClass = pt-page-moveFromTop pt-page-ontop;
182                 break;
183             case 9:
184                 outClass = pt-page-moveToLeftFade;
185                 inClass = pt-page-moveFromRightFade;
186                 break;
187             case 10:
188                 outClass = pt-page-moveToRightFade;
189                 inClass = pt-page-moveFromLeftFade;
190                 break;
191             case 11:
192                 outClass = pt-page-moveToTopFade;
193                 inClass = pt-page-moveFromBottomFade;
194                 break;
195             case 12:
196                 outClass = pt-page-moveToBottomFade;
197                 inClass = pt-page-moveFromTopFade;
198                 break;
199             case 13:
200                 outClass = pt-page-moveToLeftEasing pt-page-ontop;
201                 inClass = pt-page-moveFromRight;
202                 break;
203             case 14:
204                 outClass = pt-page-moveToRightEasing pt-page-ontop;
205                 inClass = pt-page-moveFromLeft;
206                 break;
207             case 15:
208                 outClass = pt-page-moveToTopEasing pt-page-ontop;
209                 inClass = pt-page-moveFromBottom;
210                 break;
211             case 16:
212                 outClass = pt-page-moveToBottomEasing pt-page-ontop;
213                 inClass = pt-page-moveFromTop;
214                 break;
215             case 17:
216                 outClass = pt-page-scaleDown;
217                 inClass = pt-page-moveFromRight pt-page-ontop;
218                 break;
219             case 18:
220                 outClass = pt-page-scaleDown;
221                 inClass = pt-page-moveFromLeft pt-page-ontop;
222                 break;
223             case 19:
224                 outClass = pt-page-scaleDown;
225                 inClass = pt-page-moveFromBottom pt-page-ontop;
226                 break;
227             case 20:
228                 outClass = pt-page-scaleDown;
229                 inClass = pt-page-moveFromTop pt-page-ontop;
230                 break;
231             case 21:
232                 outClass = pt-page-scaleDown;
233                 inClass = pt-page-scaleUpDown pt-page-delay300;
234                 break;
235             case 22:
236                 outClass = pt-page-scaleDownUp;
237                 inClass = pt-page-scaleUp pt-page-delay300;
238                 break;
239             case 23:
240                 outClass = pt-page-moveToLeft pt-page-ontop;
241                 inClass = pt-page-scaleUp;
242                 break;
243             case 24:
244                 outClass = pt-page-moveToRight pt-page-ontop;
245                 inClass = pt-page-scaleUp;
246                 break;
247             case 25:
248                 outClass = pt-page-moveToTop pt-page-ontop;
249                 inClass = pt-page-scaleUp;
250                 break;
251             case 26:
252                 outClass = pt-page-moveToBottom pt-page-ontop;
253                 inClass = pt-page-scaleUp;
254                 break;
255             case 27:
256                 outClass = pt-page-scaleDownCenter;
257                 inClass = pt-page-scaleUpCenter pt-page-delay400;
258                 break;
259             case 28:
260                 outClass = pt-page-rotateRightSideFirst;
261                 inClass = pt-page-moveFromRight pt-page-delay200 pt-page-ontop;
262                 break;
263             case 29:
264                 outClass = pt-page-rotateLeftSideFirst;
265                 inClass = pt-page-moveFromLeft pt-page-delay200 pt-page-ontop;
266                 break;
267             case 30:
268                 outClass = pt-page-rotateTopSideFirst;
269                 inClass = pt-page-moveFromTop pt-page-delay200 pt-page-ontop;
270                 break;
271             case 31:
272                 outClass = pt-page-rotateBottomSideFirst;
273                 inClass = pt-page-moveFromBottom pt-page-delay200 pt-page-ontop;
274                 break;
275             case 32:
276                 outClass = pt-page-flipOutRight;
277                 inClass = pt-page-flipInLeft pt-page-delay500;
278                 break;
279             case 33:
280                 outClass = pt-page-flipOutLeft;
281                 inClass = pt-page-flipInRight pt-page-delay500;
282                 break;
283             case 34:
284                 outClass = pt-page-flipOutTop;
285                 inClass = pt-page-flipInBottom pt-page-delay500;
286                 break;
287             case 35:
288                 outClass = pt-page-flipOutBottom;
289                 inClass = pt-page-flipInTop pt-page-delay500;
290                 break;
291             case 36:
292                 outClass = pt-page-rotateFall pt-page-ontop;
293                 inClass = pt-page-scaleUp;
294                 break;
295             case 37:
296                 outClass = pt-page-rotateOutNewspaper;
297                 inClass = pt-page-rotateInNewspaper pt-page-delay500;
298                 break;
299             case 38:
300                 outClass = pt-page-rotatePushLeft;
301                 inClass = pt-page-moveFromRight;
302                 break;
303             case 39:
304                 outClass = pt-page-rotatePushRight;
305                 inClass = pt-page-moveFromLeft;
306                 break;
307             case 40:
308                 outClass = pt-page-rotatePushTop;
309                 inClass = pt-page-moveFromBottom;
310                 break;
311             case 41:
312                 outClass = pt-page-rotatePushBottom;
313                 inClass = pt-page-moveFromTop;
314                 break;
315             case 42:
316                 outClass = pt-page-rotatePushLeft;
317                 inClass = pt-page-rotatePullRight pt-page-delay180;
318                 break;
319             case 43:
320                 outClass = pt-page-rotatePushRight;
321                 inClass = pt-page-rotatePullLeft pt-page-delay180;
322                 break;
323             case 44:
324                 outClass = pt-page-rotatePushTop;
325                 inClass = pt-page-rotatePullBottom pt-page-delay180;
326                 break;
327             case 45:
328                 outClass = pt-page-rotatePushBottom;
329                 inClass = pt-page-rotatePullTop pt-page-delay180;
330                 break;
331             case 46:
332                 outClass = pt-page-rotateFoldLeft;
333                 inClass = pt-page-moveFromRightFade;
334                 break;
335             case 47:
336                 outClass = pt-page-rotateFoldRight;
337                 inClass = pt-page-moveFromLeftFade;
338                 break;
339             case 48:
340                 outClass = pt-page-rotateFoldTop;
341                 inClass = pt-page-moveFromBottomFade;
342                 break;
343             case 49:
344                 outClass = pt-page-rotateFoldBottom;
345                 inClass = pt-page-moveFromTopFade;
346                 break;
347             case 50:
348                 outClass = pt-page-moveToRightFade;
349                 inClass = pt-page-rotateUnfoldLeft;
350                 break;
351             case 51:
352                 outClass = pt-page-moveToLeftFade;
353                 inClass = pt-page-rotateUnfoldRight;
354                 break;
355             case 52:
356                 outClass = pt-page-moveToBottomFade;
357                 inClass = pt-page-rotateUnfoldTop;
358                 break;
359             case 53:
360                 outClass = pt-page-moveToTopFade;
361                 inClass = pt-page-rotateUnfoldBottom;
362                 break;
363             case 54:
364                 outClass = pt-page-rotateRoomLeftOut pt-page-ontop;
365                 inClass = pt-page-rotateRoomLeftIn;
366                 break;
367             case 55:
368                 outClass = pt-page-rotateRoomRightOut pt-page-ontop;
369                 inClass = pt-page-rotateRoomRightIn;
370                 break;
371             case 56:
372                 outClass = pt-page-rotateRoomTopOut pt-page-ontop;
373                 inClass = pt-page-rotateRoomTopIn;
374                 break;
375             case 57:
376                 outClass = pt-page-rotateRoomBottomOut pt-page-ontop;
377                 inClass = pt-page-rotateRoomBottomIn;
378                 break;
379             case 58:
380                 outClass = pt-page-rotateCubeLeftOut pt-page-ontop;
381                 inClass = pt-page-rotateCubeLeftIn;
382                 break;
383             case 59:
384                 outClass = pt-page-rotateCubeRightOut pt-page-ontop;
385                 inClass = pt-page-rotateCubeRightIn;
386                 break;
387             case 60:
388                 outClass = pt-page-rotateCubeTopOut pt-page-ontop;
389                 inClass = pt-page-rotateCubeTopIn;
390                 break;
391             case 61:
392                 outClass = pt-page-rotateCubeBottomOut pt-page-ontop;
393                 inClass = pt-page-rotateCubeBottomIn;
394                 break;
395             case 62:
396                 outClass = pt-page-rotateCarouselLeftOut pt-page-ontop;
397                 inClass = pt-page-rotateCarouselLeftIn;
398                 break;
399             case 63:
400                 outClass = pt-page-rotateCarouselRightOut pt-page-ontop;
401                 inClass = pt-page-rotateCarouselRightIn;
402                 break;
403             case 64:
404                 outClass = pt-page-rotateCarouselTopOut pt-page-ontop;
405                 inClass = pt-page-rotateCarouselTopIn;
406                 break;
407             case 65:
408                 outClass = pt-page-rotateCarouselBottomOut pt-page-ontop;
409                 inClass = pt-page-rotateCarouselBottomIn;
410                 break;
411             case 66:
412                 outClass = pt-page-rotateSidesOut;
413                 inClass = pt-page-rotateSidesIn pt-page-delay200;
414                 break;
415             case 67:
416                 outClass = pt-page-rotateSlideOut;
417                 inClass = pt-page-rotateSlideIn;
418                 break;
419         }
420     }
421   </script>
422 </head>
423 <body>
424     <div id="viewsWrapper">
425         <div id="view1" class="pt-page">这个是页面1......</div>
426         <div id="view2" class="pt-page">这个是页面2......</div>
427         <div id="view3" class="pt-page">这个是页面3......</div>
428         <div id="view4" class="pt-page">这个是页面4......</div>
429     </div>
430     <br/>
431     <input type="button" onclick="changeView(‘#view1‘)" value="切换页面1"/>
432     <input type="button" onclick="changeView(‘#view2‘)" value="切换页面2"/>
433     <input type="button" onclick="changeView(‘#view3‘)" value="切换页面3"/>
434     <input type="button" onclick="changeView(‘#view4‘)" value="切换页面4"/>
435     <br/>
436     <br/>
437     <div id="radiosDiv"></div>
438 </body>
439 </html>

 

HTML5 - 用CSS3动画制作场景切换效果(移动,旋转,淡入淡出等)

上一篇:【Android开发日记】妙用 RelativeLayout 实现3段式布局


下一篇:理解与学习linux 文件系统的目录结构