这篇文章主要介绍css怎么实现无限轮播图动画,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!
1、设置动画的舞台
HTML与之前文章里的示例非常相似。我们要有一个动画发生的舞台(#stage),一个将会旋转的div容器和一系列图像:
<divid="stage">
<divid="rotator"style="-webkit-animation-name:rotator;">
<ahref="1.jpg"><imgsrc="1.jpg"width="140"></a>
<ahref="2.jpg"><imgsrc="2.jpg"width="140"></a>
<ahref="3.jpg"><imgsrc="3.jpg"width="140"></a>
<ahref="4.jpg"><imgsrc="4.jpg"width="140"></a>
<ahref="5.jpg"><imgsrc="5.jpg"width="140"></a>
<ahref="6.jpg"><imgsrc="6.jpg"width="140"></a>
<ahref="7.jpg"><imgsrc="7.jpg"width="140"></a>
<ahref="8.jpg"><imgsrc="8.jpg"width="140"></a>
</div>
</div>
内联样式属性引用下面的动画@keyframes。它需要内联而不是CSS,以便我们能够使用JavaScript停止和重新启动动画。
2、在3D空间中布置照片
CSS样式用于定位多张照片,首先围绕y轴旋转它们(垂直向上翻页),然后径向向外平移:
#stage{
margin:2emauto1em50%;
height:140px;
-webkit-perspective:1200px;
-webkit-perspective-origin:050%;
}
#rotatora{
position:absolute;
left:-81px;
}
#rotatoraimg{
padding:10px;
border:1pxsolid#ccc;
background:#fff;
-webkit-backface-visibility:hidden;
}
#rotatora:nth-of-type(1)img{
-webkit-transform:rotateY(-90deg)translateZ(300px);
}
#rotatora:nth-of-type(2)img{
-webkit-transform:rotateY(-60deg)translateZ(300px);
}
#rotatora:nth-of-type(3)img{
-webkit-transform:rotateY(-30deg)translateZ(300px);
}
#rotatora:nth-of-type(4)img{
-webkit-transform:translateZ(300px);
background:#000;
}
#rotatora:nth-of-type(5)img{
-webkit-transform:rotateY(30deg)translateZ(300px);
}
#rotatora:nth-of-type(6)img{
-webkit-transform:rotateY(60deg)translateZ(300px);
}
#rotatora:nth-of-type(n+7){display:none;}
照片设置-81px的值代表向左移动,使前向照片在旋转轴上居中。距离是图像宽度的一半(140px/2)加上LHS图像填充(10px)和边框(1px)。
该阶段需要设置立体的动画,舞台从页面的中心开始,因此旋转元素下的锚元素需要向后移动以使动画居中。
我们只开始准备六张照片,左边三张,中间一张,右边两张。最左侧的照片(位置1)从左侧开始,因此仅在第一次旋转后才可见。
当照片旋转时,它会消失(显示:无),并且新照片会附加到左侧,准备从位置1旋转。在7和更高的位置可以有任意数量的照片。只有当它们移动到可见位置时,它们才会出现。
甚至可以在动画进行时使用Ajax加载新照片。
3、添加动画效果
正如我们之前尝试的那样,不是将照片轮旋转整整360度,而是我们实际做的只是旋转30度(足以从一张照片到下一张照片):
@-webkit-keyframesrotator{
from{-webkit-transform:rotateY(0deg);}
to{-webkit-transform:rotateY(30deg);}
}
#rotator{
-webkit-transform-origin:00;
-webkit-transform-style:preserve-3d;
-webkit-animation-timing-function:cubic-bezier(1,0.2,0.2,1);
-webkit-animation-duration:1s;
-webkit-animation-delay:1s;
}
#rotator:hover{
-webkit-animation-play-state:paused;
}
要使关键帧在其他浏览器中工作,请复制所有样式,替换-webkit-with-moz-和-ms-,如下面的示例代码块所示。
动画完成后,它会触发一个JavaScript事件,您可以在下一节中阅读该事件。事件处理程序沿着照片移动,以便在动画重置时,而不是回到初始状态,照片都围绕圆圈移动了一步。
为了更清楚地了解正在发生的事情,中心照片已在下面的演示中突出显示。在动画发生时,您将看到突出显示的节点旋转,然后重置回起始位置,但包含不同的照片。
4、JavaScript添加动画控制器
我们在此示例中需要JavaScript来检测动画何时结束,以便协调通过车轮重置移动的照片。没有这个,轮子只会在前两张照片之间交替出现。
document.addEventListener("DOMContentLoaded",function(){
varrotateComplete=function(){
target.style.webkitAnimationName="";
target.insertBefore(arr[arr.length-1],arr[0]);
setTimeout(function(el){
el.style.webkitAnimationName="rotator";
},0,target);
};
vartarget=document.getElementById("rotator");
vararr=target.getElementsByTagName("a");
target.addEventListener("webkitAnimationEnd",rotateComplete,false);
},false);
对于每个WebKit样式和其他引用,存在Firefox(-moz-或Moz),Opera(-o-或O),甚至InternetExplorer(-ms-或ms)的替代品-我们必须忍受的混乱直到标准最终确定。
要在Safari,Chrome,Firefox,Opera和InternetExplorer10中使用此功能,我们需要包含以下额外的设置:
varrotateComplete=function(){
with(target.style){
webkitAnimationName=MozAnimationName=msAnimationName="";
}
target.insertBefore(arr[arr.length-1],arr[0]);
setTimeout(function(el){
with(el.style){
webkitAnimationName=MozAnimationName=msAnimationName="rotator";
}
},0,target);
};
vartarget=document.getElementById("rotator");
vararr=target.getElementsByTagName("a");
target.addEventListener("webkitAnimationEnd",rotateComplete,false);
target.addEventListener("animationend",rotateComplete,false);
target.addEventListener("MSAnimationEnd",rotateComplete,false);
目前尚不清楚为何需要setTimeout。我们不需要它来设置延迟,因为使用CSS完成,但没有setTimeout(甚至0ms)动画无法重新触发。
以上是“css怎么实现无限轮播图动画”这篇文章的所有内容,感谢各位的阅读!希望分享的内容对大家有帮助,更多相关知识,欢迎关注亿速云行业资讯频道!
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。