温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

css怎么实现无限轮播图动画

发布时间:2022-03-05 09:44:43 来源:亿速云 阅读:253 作者:小新 栏目:web开发

这篇文章主要介绍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怎么实现无限轮播图动画”这篇文章的所有内容,感谢各位的阅读!希望分享的内容对大家有帮助,更多相关知识,欢迎关注亿速云行业资讯频道!

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

css
AI