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>