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

article/2025/9/24 22:47:47

两个场景(即两个div视图)切换的时候,如果想添加个过渡动画,除了可以使用js来实现,还可以通过CSS3的animation属性来实现。
(注意:Internet Explorer 9 以及更早的版本不支持 animation 属性。)

下面做了个过渡动画汇总,包含常见的动画效果,效果图如下:
这里写图片描述

点击此处查看运行效果。

代码如下:

<!DOCTYPE html>
<html>
<head><meta charset="utf-8"><title>HTML5-页面切换动画</title><link href="animations.css" rel="stylesheet"><script src="modernizr.custom.js"></script><script src="jquery-1.8.0.min.js"></script><style>#viewsWrapper {top:0px;left:0px;width:300px;height:200px;position:relative;overflow: hidden;}#view1 {background:#dddd00;}#view2 {background:#ff00ff;}#view3 {background:#cc00ff;}#view4 {background:#00cccc;}.pt-page {width: 100%;height: 100%;position: absolute;top: 0;left: 0;visibility: hidden;overflow: hidden;-webkit-backface-visibility: hidden;-moz-backface-visibility: hidden;backface-visibility: hidden;-webkit-transform: translate3d(0, 0, 0);-moz-transform: translate3d(0, 0, 0);transform: translate3d(0, 0, 0);-webkit-transform-style: preserve-3d;-moz-transform-style: preserve-3d;transform-style: preserve-3d;}.pt-page-current,.no-js .pt-page {visibility: visible;z-index: 1;}</style><script>//当前页面移动完毕var endCurrPage = false;//后续页面移动完毕var endNextPage = false;//入场动画和出场动画var outClass = '';var inClass = '';var animEndEventNames = {'WebkitAnimation' : 'webkitAnimationEnd','OAnimation' : 'oAnimationEnd','msAnimation' : 'MSAnimationEnd','animation' : 'animationend'},// animation end event nameanimEndEventName = animEndEventNames[ Modernizr.prefixed( 'animation' ) ]$(function() {//保存各个View的默认class$(".pt-page").each( function() {var $page = $( this );$page.data( 'originalClassList', $page.attr( 'class' ) );} );//设置默认页面$(".pt-page").eq(0).addClass( 'pt-page-current' );//添加动画样式单选框var str = "";for(var i=1;i<=67;i++){str += '<input type="radio" name="myAnimation" value="'+i+'" />效果'+i;if(i%7==0){str += "<br/>";}}$("#radiosDiv").html(str);});//View切换function changeView(newView){//设置动画效果   var animationType = $('input:radio[name="myAnimation"]:checked:eq(0)').val();getAnimationClass(parseInt(animationType));$currPage = $(".pt-page-current").eq(0);$nextPage = $(newView);//清除原来添加的动画,层级等样式//(正常动画结束时会自动清除,这样做防止用户在动画结束前就点击切换其他的)$(".pt-page").each( function() {$(this).attr( 'class', $(this).data( 'originalClassList' ) );});$currPage.addClass("pt-page-current");$nextPage.addClass("pt-page-current");//如果就是当页则不切换if($currPage.attr("id") == $nextPage.attr("id")){return;}//新页面入场$currPage.addClass(outClass).on( animEndEventName, function() {$currPage.off( animEndEventName );endCurrPage = true;if( endNextPage ) {onEndAnimation( $currPage, $nextPage );}} );//旧页面出场$nextPage.addClass(inClass).on( animEndEventName, function() {$nextPage.off( animEndEventName );endNextPage = true;if( endCurrPage ) {onEndAnimation( $currPage, $nextPage );}} );}//所有动画都结束后function onEndAnimation( $outpage, $inpage ) {endCurrPage = false;endNextPage = false;//resetPage( $outpage, $inpage );//isAnimating = false;$outpage.attr( 'class', $outpage.data( 'originalClassList' ) );$inpage.attr( 'class', $inpage.data( 'originalClassList' ) + ' pt-page-current' );}  function getAnimationClass(animationType) {switch(animationType) {case 1:    outClass = 'pt-page-moveToLeft';inClass = 'pt-page-moveFromRight';break;case 2:outClass = 'pt-page-moveToRight';inClass = 'pt-page-moveFromLeft';break;case 3:outClass = 'pt-page-moveToTop';inClass = 'pt-page-moveFromBottom';break;case 4:outClass = 'pt-page-moveToBottom';inClass = 'pt-page-moveFromTop';break;case 5:outClass = 'pt-page-fade';inClass = 'pt-page-moveFromRight pt-page-ontop';break;case 6:outClass = 'pt-page-fade';inClass = 'pt-page-moveFromLeft pt-page-ontop';break;case 7:outClass = 'pt-page-fade';inClass = 'pt-page-moveFromBottom pt-page-ontop';break;case 8:outClass = 'pt-page-fade';inClass = 'pt-page-moveFromTop pt-page-ontop';break;case 9:outClass = 'pt-page-moveToLeftFade';inClass = 'pt-page-moveFromRightFade';break;case 10:outClass = 'pt-page-moveToRightFade';inClass = 'pt-page-moveFromLeftFade';break;case 11:outClass = 'pt-page-moveToTopFade';inClass = 'pt-page-moveFromBottomFade';break;case 12:outClass = 'pt-page-moveToBottomFade';inClass = 'pt-page-moveFromTopFade';break;case 13:outClass = 'pt-page-moveToLeftEasing pt-page-ontop';inClass = 'pt-page-moveFromRight';break;case 14:outClass = 'pt-page-moveToRightEasing pt-page-ontop';inClass = 'pt-page-moveFromLeft';break;case 15:outClass = 'pt-page-moveToTopEasing pt-page-ontop';inClass = 'pt-page-moveFromBottom';break;case 16:outClass = 'pt-page-moveToBottomEasing pt-page-ontop';inClass = 'pt-page-moveFromTop';break;case 17:outClass = 'pt-page-scaleDown';inClass = 'pt-page-moveFromRight pt-page-ontop';break;case 18:outClass = 'pt-page-scaleDown';inClass = 'pt-page-moveFromLeft pt-page-ontop';break;case 19:outClass = 'pt-page-scaleDown';inClass = 'pt-page-moveFromBottom pt-page-ontop';break;case 20:outClass = 'pt-page-scaleDown';inClass = 'pt-page-moveFromTop pt-page-ontop';break;case 21:outClass = 'pt-page-scaleDown';inClass = 'pt-page-scaleUpDown pt-page-delay300';break;case 22:outClass = 'pt-page-scaleDownUp';inClass = 'pt-page-scaleUp pt-page-delay300';break;case 23:outClass = 'pt-page-moveToLeft pt-page-ontop';inClass = 'pt-page-scaleUp';break;case 24:outClass = 'pt-page-moveToRight pt-page-ontop';inClass = 'pt-page-scaleUp';break;case 25:outClass = 'pt-page-moveToTop pt-page-ontop';inClass = 'pt-page-scaleUp';break;case 26:outClass = 'pt-page-moveToBottom pt-page-ontop';inClass = 'pt-page-scaleUp';break;case 27:outClass = 'pt-page-scaleDownCenter';inClass = 'pt-page-scaleUpCenter pt-page-delay400';break;case 28:outClass = 'pt-page-rotateRightSideFirst';inClass = 'pt-page-moveFromRight pt-page-delay200 pt-page-ontop';break;case 29:outClass = 'pt-page-rotateLeftSideFirst';inClass = 'pt-page-moveFromLeft pt-page-delay200 pt-page-ontop';break;case 30:outClass = 'pt-page-rotateTopSideFirst';inClass = 'pt-page-moveFromTop pt-page-delay200 pt-page-ontop';break;case 31:outClass = 'pt-page-rotateBottomSideFirst';inClass = 'pt-page-moveFromBottom pt-page-delay200 pt-page-ontop';break;case 32:outClass = 'pt-page-flipOutRight';inClass = 'pt-page-flipInLeft pt-page-delay500';break;case 33:outClass = 'pt-page-flipOutLeft';inClass = 'pt-page-flipInRight pt-page-delay500';break;case 34:outClass = 'pt-page-flipOutTop';inClass = 'pt-page-flipInBottom pt-page-delay500';break;case 35:outClass = 'pt-page-flipOutBottom';inClass = 'pt-page-flipInTop pt-page-delay500';break;case 36:outClass = 'pt-page-rotateFall pt-page-ontop';inClass = 'pt-page-scaleUp';break;case 37:outClass = 'pt-page-rotateOutNewspaper';inClass = 'pt-page-rotateInNewspaper pt-page-delay500';break;case 38:outClass = 'pt-page-rotatePushLeft';inClass = 'pt-page-moveFromRight';break;case 39:outClass = 'pt-page-rotatePushRight';inClass = 'pt-page-moveFromLeft';break;case 40:outClass = 'pt-page-rotatePushTop';inClass = 'pt-page-moveFromBottom';break;case 41:outClass = 'pt-page-rotatePushBottom';inClass = 'pt-page-moveFromTop';break;case 42:outClass = 'pt-page-rotatePushLeft';inClass = 'pt-page-rotatePullRight pt-page-delay180';break;case 43:outClass = 'pt-page-rotatePushRight';inClass = 'pt-page-rotatePullLeft pt-page-delay180';break;case 44:outClass = 'pt-page-rotatePushTop';inClass = 'pt-page-rotatePullBottom pt-page-delay180';break;case 45:outClass = 'pt-page-rotatePushBottom';inClass = 'pt-page-rotatePullTop pt-page-delay180';break;case 46:outClass = 'pt-page-rotateFoldLeft';inClass = 'pt-page-moveFromRightFade';break;case 47:outClass = 'pt-page-rotateFoldRight';inClass = 'pt-page-moveFromLeftFade';break;case 48:outClass = 'pt-page-rotateFoldTop';inClass = 'pt-page-moveFromBottomFade';break;case 49:outClass = 'pt-page-rotateFoldBottom';inClass = 'pt-page-moveFromTopFade';break;case 50:outClass = 'pt-page-moveToRightFade';inClass = 'pt-page-rotateUnfoldLeft';break;case 51:outClass = 'pt-page-moveToLeftFade';inClass = 'pt-page-rotateUnfoldRight';break;case 52:outClass = 'pt-page-moveToBottomFade';inClass = 'pt-page-rotateUnfoldTop';break;case 53:outClass = 'pt-page-moveToTopFade';inClass = 'pt-page-rotateUnfoldBottom';break;case 54:outClass = 'pt-page-rotateRoomLeftOut pt-page-ontop';inClass = 'pt-page-rotateRoomLeftIn';break;case 55:outClass = 'pt-page-rotateRoomRightOut pt-page-ontop';inClass = 'pt-page-rotateRoomRightIn';break;case 56:outClass = 'pt-page-rotateRoomTopOut pt-page-ontop';inClass = 'pt-page-rotateRoomTopIn';break;case 57:outClass = 'pt-page-rotateRoomBottomOut pt-page-ontop';inClass = 'pt-page-rotateRoomBottomIn';break;case 58:outClass = 'pt-page-rotateCubeLeftOut pt-page-ontop';inClass = 'pt-page-rotateCubeLeftIn';break;case 59:outClass = 'pt-page-rotateCubeRightOut pt-page-ontop';inClass = 'pt-page-rotateCubeRightIn';break;case 60:outClass = 'pt-page-rotateCubeTopOut pt-page-ontop';inClass = 'pt-page-rotateCubeTopIn';break;case 61:outClass = 'pt-page-rotateCubeBottomOut pt-page-ontop';inClass = 'pt-page-rotateCubeBottomIn';break;case 62:outClass = 'pt-page-rotateCarouselLeftOut pt-page-ontop';inClass = 'pt-page-rotateCarouselLeftIn';break;case 63:outClass = 'pt-page-rotateCarouselRightOut pt-page-ontop';inClass = 'pt-page-rotateCarouselRightIn';break;case 64:outClass = 'pt-page-rotateCarouselTopOut pt-page-ontop';inClass = 'pt-page-rotateCarouselTopIn';break;case 65:outClass = 'pt-page-rotateCarouselBottomOut pt-page-ontop';inClass = 'pt-page-rotateCarouselBottomIn';break;case 66:outClass = 'pt-page-rotateSidesOut';inClass = 'pt-page-rotateSidesIn pt-page-delay200';break;case 67:outClass = 'pt-page-rotateSlideOut';inClass = 'pt-page-rotateSlideIn';break;}}</script>
</head>
<body><div id="viewsWrapper"><div id="view1" class="pt-page">这个是页面1......</div><div id="view2" class="pt-page">这个是页面2......</div><div id="view3" class="pt-page">这个是页面3......</div><div id="view4" class="pt-page">这个是页面4......</div></div><br/><input type="button" onclick="changeView('#view1')" value="切换页面1"/><input type="button" onclick="changeView('#view2')" value="切换页面2"/><input type="button" onclick="changeView('#view3')" value="切换页面3"/><input type="button" onclick="changeView('#view4')" value="切换页面4"/><br/><br/><div id="radiosDiv"></div>
</body>
</html>

源码下载:场景切换.zip

原文出自:www.hangge.com 转载请保留原文链接:http://www.hangge.com/blog/cache/detail_829.html


http://chatgpt.dhexx.cn/article/APq2skjm.shtml

相关文章

CSS3 元素转圈动画 (元素旋转动画)

CSS3 元素转圈动画 &#xff08;元素旋转动画&#xff09; <!DOCTYPE html> <html> <head> <style> div { width:100px; height:100px; background:red; position:relative; animation:mymove 5s infinite; -webkit-animation:mymove 5s infinite; /*…

css3 animation动画360旋转。旋转效果用transform:rotate过渡。

旋转&#xff1a; <div class"lds-hourglass"></div> .lds-hourglass {display:inline-block;position:relative;width:72px;height:72px } .lds-hourglass:after {content:" ";display:block;border-radius:50%;width:0;height:0;margin:6p…

css的rotate3d实现炫酷的圆环转动动画

1.实现效果 2.实现原理 2.1 rotate3d rotate3d&#xff1a;rotate3d() CSS 函数定义一个变换&#xff0c;它将元素围绕固定轴移动而不使其变形。运动量由指定的角度定义; 如果为正&#xff0c;运动将为顺时针&#xff0c;如果为负&#xff0c;则为逆时针。 语法&#xff1a; …

CSS3实现3d图片旋转动画效果

1.实现原理 1.首先所有的图片的容器position:absolute&#xff0c;叠加在一起&#xff0c;然后一次设置rotateY分别为&#xff08;36*i&#xff09;deg &#xff0c;i取0到10 &#xff1b;所有图片会相交成一个类似花的形状 然后为每个图片的容器设置translateZ&#xff0c;所有…

CSS3实现立体旋转动画效果

问题描述 一个3D立体图形在网页中呈现旋转效果,看起来十分炫酷,这个过程的实现其实并不困难,只需要利用CSS3动画效果,并对属性设置合适的参数之后,效果就能实现了。 在解决问题之前,需要先了解CSS3的动画效果是什么,其相关属性和参数有什么含义,这个过程就请查看CSS3动…

css3d动画:平移、旋转、缩放

1、前言&#xff1a; 3d比2d多了一个z轴&#xff0c;这个z轴是垂直我们屏幕的方向&#xff0c;指向我们人眼的是正轴&#xff0c;远离人眼的是负轴&#xff0c;图示如下&#xff1a; 2、景深设置和3d平移 当我们在z轴上向正轴方向上移动物体&#xff0c;也就是向我们眼前移动…

使用css3属性做一个循环旋转的动画

做这个动画是使用css3中的animation 和 @-webkit-keyframes 组合使用来完成 //这是html部分代码 <div class="home"><imgalt="logo"src="http://b-ssl.duitang.com/uploads/item/201206/26/20120626190359_MjB3s.jpeg"id="images…

基于HTML5+CSS3的图片旋转、无限滚动、文字跳动特效

本文分享几种基于HTML5CSS3实现的一些动画特效&#xff1a;图片旋转、无限滚动、文字跳动;实现起来均比较容易&#xff0c;动手来试试! 一、图片旋转 效果图如下&#xff1a; 这个效果实现起来其实并不困难。代码清单如下: <style type"text/css"> #liu{ wid…

内存碎片产生原因及终极解决办法

内存碎片通常分为内部碎片和外部碎片&#xff1a; 1. 内部碎片是由于采用固定大小的内存分区&#xff0c;当一个进程不能完全使用分给它的固定内存区域时就产生了内部碎片&#xff0c;通常内部碎片难以完全避免&#xff1b; 2. 外部碎片是由于某些未分配的连续内存区域太小&…

6、Redis内存碎片优化

1、Redis内存碎片是如何形成的 一是内存分配器的分配策略&#xff0c;内存分配器一般是按固定大小来分配内存&#xff0c;而不是按实际使用大小来分配。例如8字节、16字节、32字节...&#xff0c;2KB&#xff0c;4KB&#xff0c;8KB等&#xff0c;按程序申请时最接近某个固定值…

内存碎片处理技术

内存碎片处理技术 内存碎片是一个很棘手的问题。如何分配内存决定着内存碎片是否会、何时会、如何会成为一个问题。 即使在系统中事实上仍然有许多空闲内存时&#xff0c;内存碎片还会最终导致出现内存用完的 情况。一个不断产生内存碎片的系统&#xff0c;不管产生的内存碎片…

内存碎片产生原因及处理

内存碎片是一个很棘手的问题。如何分配内存决定着内存碎片是否会、何时会、如何会成为一个问题。  即使在系统中事实上仍然有许多空闲内存时&#xff0c;内存碎片还会最终导致出现内存用完的情况。一个不断产生内存碎片的系统&#xff0c;不管产生的内存碎片多么小&#xff0…

什么是Redis内存碎片率?碎片如何清理?

Redis服务器内存不够用了&#xff0c;这时可以看看是否是内存碎片的原因&#xff0c;不一定只能靠内存扩容来处理。 一、碎片率的计算 我们登陆到Redis服务器上&#xff0c;执行以下命令&#xff1a; info memory我们会看到如下的信息&#xff1a; 其中mem_fragmentation_r…

Redis 内存碎片详解

什么是内存碎片? 你可以将内存碎片简单地理解为那些不可用的空闲内存。 举个例子&#xff1a;操作系统为你分配了 32 字节的连续内存空间&#xff0c;而你存储数据实际只需要使用 24 字节内存空间&#xff0c;那这多余出来的 8 字节内存空间如果后续没办法再被分配存储其他数…

redis之内存碎片问题如何解决

写在前面 本文一起看下如何处理Redis的内存碎片问题。 1&#xff1a;什么是内存碎片 当操作系统内存充足&#xff0c;但是却无法申请连续N字节内存空间时&#xff0c;这些剩余的内存空间就叫内存碎片。 2&#xff1a;内存碎片是如何形成的 内存碎片的形成有两方面的因素&a…

如何解决内存碎片

内存碎片的产生&#xff1a; 内存分配有静态分配和动态分配两种 静态分配在程序编译链接时分配的大小和使用寿命就已经确定&#xff0c;而应用上要求操作系统可以提供给进程运行时申请和释放任意大小内存的功能&#xff0c;这就是内存的动态分配。 因此动态分配…

内存中,外部碎片与内部碎片,解决办法

什么是内部碎片、外部碎片 外部碎片&#xff0c;是由于大量信息由于先后写入、置换、删除而形成的空间碎片。为了便于理解&#xff0c;我们将信息比作货物&#xff0c;将存储空间比作仓库来举例子。假设&#xff0c;我们有编号为1、2、3、4、5、6的6间仓库库房&#xff0c;前天…

内存碎片

内存碎片的产生&#xff1a; 内存分配有静态分配和动态分配两种 静态分配在程序编译链接时分配的大小和使用寿命就已经确定&#xff0c;而应用上要求操作系统可以提供给进程运行时申请和释放任意大小内存的功能&#xff0c;这就是内存的动态分配。 因此动态分配…

内存碎片---内部碎片外部碎片

内部碎片的产生&#xff1a;因为所有的内存分配必须起始于可被 4、8 或 16 整除&#xff08;视处理器体系结构而定&#xff09;的地址或者因为MMU的分页机制的限制&#xff0c;决定内存分配算法仅能把预定大小的内存块分配给客户。假设当某个客户请求一个43字节的内存块时&…

内存碎片是什么?关于内存碎片的解释

内存碎片是什么&#xff1f;关于内存碎片 内存碎片通常分为内部碎片和外部碎片。 内部碎片 所谓内部碎片指的就是&#xff0c;系统为某项功能分派了一定的内存&#xff0c;但是该功能的实现没有用完所有系统分配的。余下的部分就被成为内存碎片的内部碎片。 外部碎片 外部内存…